summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2022-07-10 21:34:26 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2022-07-15 03:33:24 -0400
commit820827a4ad5a22a904b05bf8622ca1823014907f (patch)
tree604a1b6659ea3dceaf01ac40c20e3297380e6b64
parentfa70b032579aeb81f0625febff96339da7fa24f5 (diff)
[linux-libre-64]: cross-compile only from x86_64
-rw-r--r--libre/linux-libre-64/PKGBUILD117
1 files changed, 83 insertions, 34 deletions
diff --git a/libre/linux-libre-64/PKGBUILD b/libre/linux-libre-64/PKGBUILD
index ecc139bd2..6077b7f33 100644
--- a/libre/linux-libre-64/PKGBUILD
+++ b/libre/linux-libre-64/PKGBUILD
@@ -1,10 +1,28 @@
# Maintainers: Parabola hackers <dev@lists.parabola.nu>
# WIP - Based on the linux-libre package.
-# this PKGBUILD includes a lot of cruft, to minimize the diff.
-# eventually, these chanegs can be merged into linux-libre
+# This PKGBUILD includes a lot of cruft, to minimize the diff.
+# Eventually, these chanegs can be merged into linux-libre
# once parabola has an 'aarch64' build target and repos.
+# NOTE: aarch64 is not yet a valid parabola target.
+# This PKGBUILD is inteneded to be cross-compiled
+# only from an x86_64 librechroot. The x86_64 build of linux-libre
+# does not have any specail per-arch treatments; so that mechanism is
+# over-ridden for the special purpose of the cross-compilation.
+#
+# The makedepends_x86_64, source_x86_64, and sha512sums_x86_64 arrays
+# (also source_aarch64 and sha512sums_aarch64 obviously),
+# and any lines with comment: '# aarch64 over-ride'
+# indicate code that would eventually be deleted or associated with
+# $CARCH == aarch64, if/when that target exists.
+# All other LOCs of consequence in this file,
+# except for the `make` and `strip` commands,
+# should be identical to the linux-libre PKGBUILD.
+# In this way, the diff is minimal against the linux-libre PKGBUILD;
+# and it is obvious which parts should become aarch64-specific
+# (eg: source_x86_64 simpliy becomes source_aarch64).
+
_replacesarchkernel=('linux%') # '%' gets replaced with kernel suffix
_replacesoldkernels=() # '%' gets replaced with kernel suffix
@@ -13,17 +31,18 @@ _replacesoldmodules=() # '%' gets replaced with kernel suffix
pkgbase=linux-libre-64
pkgver=5.18.5
pkgrel=1
-pkgdesc="64bit Linux-libre for Parabola $CARCH"
+pkgdesc='Linux-libre 64-bit (aarch64) for Parabola armv7h'
rcnver=5.18.2
rcnrel=armv7-x6
url='https://linux-libre.fsfla.org/'
-arch=(armv7h i686)
+arch=(x86_64) # aarch64 over-ride
license=(GPL2)
makedepends=(
bc libelf pahole cpio perl tar xz
xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick texlive-latexextra
)
-makedepends_armv7h=(uboot-tools dtc) # required by linux-libre-chromebook
+makedepends_armv7h=(uboot-tools vboot-utils dtc) # required by linux-libre-chromebook
+makedepends_x86_64=(aarch64-linux-gnu-gcc) # aarch64 over-ride
options=('!strip')
_srcname=linux-5.18
source=(
@@ -52,7 +71,7 @@ source_i686=(
source_armv7h=(
# RCN patch (CM3 firmware deblobbed and bloatware removed)
"https://repo.parabola.nu/other/rcn-libre/patches/$rcnver/rcn-libre-$rcnver-$rcnrel.patch"{,.sig}
- # Arch Linux ARM patches (for armv7h)
+ # Arch Linux ARM patches
0001-ARM-atags-add-support-for-Marvell-s-u-boot.patch
0002-ARM-atags-fdt-retrieve-MAC-addresses-from-Marvell-bo.patch
0003-fix-mvsdio-eMMC-timing.patch
@@ -60,13 +79,16 @@ source_armv7h=(
0005-set-default-cubietruck-led-triggers.patch
0006-exynos4412-odroid-set-higher-minimum-buck2-regulator.patch
0007-USB-Armory-MkII-support.patch
- # Arch Linux ARM patches (for aarch64)
- # ./0001-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch
- 0002-arm64-dts-rockchip-disable-pwm0-on-rk3399-firefly.patch
# ChromiumOS patches
0001-CHROMIUM-block-partitions-efi-Add-support-for-IGNORE.patch
)
-source_armv7h+=(config.aarch64)
+source_aarch64=(
+ config.aarch64
+ # Arch Linux ARM patches (aarch64)
+ 0001-net-smsc95xx-Allow-mac-address-to-be-set-as-a-parame.patch
+ 0002-arm64-dts-rockchip-disable-pwm0-on-rk3399-firefly.patch
+)
+source_x86_64=( ${source_aarch64[*]} ) # aarch64 over-ride
validpgpkeys=(
'474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva
'6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P.
@@ -102,16 +124,19 @@ sha512sums_armv7h=('5a75b12dd386940a0bf1be630d45a514ef3c32289ec5976988764baa8483
'a1072dd808c63592178cc01ea3c36de946f277fb451b13c34f51a5ac134cde4a8a4d57487132af1c6d7b5820842cdda9dc4edb3da85d33bd02bf87a032c3263a'
'85b2e16a930b8066990c42f973d386dc3c6d62fdf3d1289bbb51df3df296c26f30051162fba49a42d38f71f05de926aa8c065097f14bd8e9f8e28a52949ead00'
'2e99582d8b670b6c6b27add14b60e957cbcf9cd6aae40491bd9dea6ac455c0ade0bbee21e3bdfb5e06ce83ad27c5a788404b05bf7ac93831ca18d2e60a67017c'
- '4224779106cc520dc2c431322d9693cc968476706854ae9630611cf2896c48a34ca11bf31a4c3995573a128cf5838a6763bac86eb4cbaf509ade9b6a83a24369'
- '5b77c587cf2ffb60acf1d9eb43330983548c7e81a53e0ffd2b04962a99441a0000d631ff77c245c7062afc2c8368d996a2456496d42dcb658f330e5083e5e029'
- 'bc7b70863929737346fe6757373897391b43af36bb6884d5351a95aca0f9120f2d2cf9b9c2c6426a440c6b394e9fb334c280711d64081563322a834ecdfb2ba6')
+ '5b77c587cf2ffb60acf1d9eb43330983548c7e81a53e0ffd2b04962a99441a0000d631ff77c245c7062afc2c8368d996a2456496d42dcb658f330e5083e5e029')
+sha512sums_aarch64=('bc7b70863929737346fe6757373897391b43af36bb6884d5351a95aca0f9120f2d2cf9b9c2c6426a440c6b394e9fb334c280711d64081563322a834ecdfb2ba6'
+ '69e81aff3ac5aada75f7330e8c82d0a6aa229585b3f442b2e1a9b86681b0eadc925408d5e2377026599fb0dee72d29043eca4d072b0e2606adc34c872e95c7d6'
+ '4224779106cc520dc2c431322d9693cc968476706854ae9630611cf2896c48a34ca11bf31a4c3995573a128cf5838a6763bac86eb4cbaf509ade9b6a83a24369')
+sha512sums_x86_64=( ${sha512sums_aarch64[*]} ) # aarch64 over-ride
_replacesarchkernel=("${_replacesarchkernel[@]/\%/${pkgbase#linux-libre}}")
_replacesoldkernels=("${_replacesoldkernels[@]/\%/${pkgbase#linux-libre}}")
_replacesoldmodules=("${_replacesoldmodules[@]/\%/${pkgbase#linux-libre}}")
case "$CARCH" in
- i686) KARCH=x86;CROSS_COMPILE=x86_64-pc-linux-gnu-;;
- armv7h) KARCH=arm64;CROSS_COMPILE=aarch64-linux-gnu-;;
+ x86_64) KARCH=arm64 ; CROSS_COMPILE=aarch64-linux-gnu- ;; # aarch64 over-ride
+ i686|x86_64) KARCH=x86;;
+ armv7h) KARCH=arm;;
esac
export STRIP=${CROSS_COMPILE}strip
@@ -158,6 +183,17 @@ prepare() {
done
fi
+ if [ "$CARCH" = "x86_64" ]; then # aarch64 over-ride
+ local src_aarch64
+ for src_aarch64 in "${source_aarch64[@]}"; do
+ src_aarch64="${src_aarch64%%::*}"
+ src_aarch64="${src_aarch64##*/}"
+ [[ $src_aarch64 = *.patch ]] || continue
+ echo "Applying patch $src_aarch64..."
+ patch -Np1 < "../$src_aarch64"
+ done
+ fi
+
local src
for src in "${source[@]}"; do
src="${src%%::*}"
@@ -168,14 +204,15 @@ prepare() {
done
echo "Setting config..."
- case "$CARCH" in
- i686) cp ../config.x86_64 .config;;
- # config.aarch64 comes straight from Arch Linux ARM and doesn't have the
- # compatibility for 32bit rootfs enabled. This makes maintenance faster than
- # having to modify the configuration file by hand at each new kernel release.
- armv7h) cp ../config.aarch64 .config;echo 'CONFIG_COMPAT=y' >> .config;;
- esac
+ cp ../config.$CARCH .config
+ if [[ "$CARCH" == x86_64 ]] # aarch64 over-ride
+ # config.aarch64 comes straight from Arch Linux ARM and doesn't have the
+ # compatibility for 32bit rootfs enabled. This makes maintenance faster than
+ # having to modify the configuration file by hand at each new kernel release.
+ then cp ../config.aarch64 .config ; echo 'CONFIG_COMPAT=y' >> .config ; # aarch64 over-ride
+ fi # aarch64 over-ride
make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE olddefconfig
+ diff -u ../config.$CARCH .config || :
make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE -s kernelrelease > version
echo "Prepared $pkgbase version $(<version)"
@@ -205,13 +242,11 @@ _package() {
echo "Installing boot image..."
# systemd expects to find the kernel here to allow hibernation
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
- # The default image target is Image.gz on arm64 but some u-boot
- # configurations and/or versions don't support that, so we use Image instead.
- if [ "$KARCH" = "arm64" ]; then
- install -Dm644 arch/$KARCH/boot/Image "$modulesdir/vmlinuz"
- else
- install -Dm644 "$(make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE -s image_name)" "$modulesdir/vmlinuz"
- fi
+ # The default arm64 image target is 'Image.gz'; but some u-boot
+ # configurations and/or versions don't support that, so we use 'Image' instead.
+ [[ "$KARCH" == "arm64" ]] && \
+ install -Dm644 arch/$KARCH/boot/Image "$modulesdir/vmlinuz" || \
+ install -Dm644 "$(make -s image_name)" "$modulesdir/vmlinuz"
# Used by mkinitcpio to name the kernel
echo "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase"
@@ -269,6 +304,18 @@ _package-headers() {
cp -t "$builddir/arch/$KARCH" -a arch/$KARCH/include
install -Dt "$builddir/arch/$KARCH/kernel" -m644 arch/$KARCH/kernel/asm-offsets.s
+ # from linux-armv7
+ if [ "$CARCH" = "armv7h" ]; then
+ for i in dove omap2; do
+ mkdir -p "$builddir/arch/$KARCH/mach-$i"
+ cp -t "$builddir/arch/$KARCH/mach-$i/" -a arch/$KARCH/mach-$i/include
+ done
+ for i in omap orion versatile; do
+ mkdir -p "$builddir/arch/$KARCH/plat-$i"
+ cp -t "$builddir/arch/$KARCH/plat-$i/" -a arch/$KARCH/plat-$i/include
+ done
+ fi
+
install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h
@@ -349,12 +396,14 @@ _package-docs() {
}
_package-chromebook() {
- pkgdesc="Experimental $pkgdesc kernel sign for Veyron Chromebooks"
- depends=(linux-libre-64=$pkgver)
+ pkgdesc="$pkgdesc kernel sign for Veyron Chromebooks"
+ depends=(linux-libre=$pkgver)
+ depends=( ${depends[*]/linux-libre/linux-libre-64} ) # aarch64 over-ride
provides+=("linux-libre-chromebook=$pkgver") # TODO: these provides, conflicts, repalces,
conflicts+=('linux-libre-chromebook') # will not needed once parabola has
replaces+=('linux-libre-chromebook') # an 'aarch64' build target and repos
- install=linux-libre-chromebook.install
+ install=$pkgbase-chromebook.install
+ install=linux-libre-chromebook.install # aarch64 over-ride
cd $_srcname
@@ -368,7 +417,7 @@ _package-chromebook() {
--pack vmlinux.kpart \
--version 1 \
--vmlinuz kernel.signed \
- --arch aarch64 \
+ --arch ${KARCH} \
--keyblock ../kernel.keyblock \
--signprivate ../kernel_data_key.vbprivk \
--config cmdline \
@@ -384,7 +433,7 @@ pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
# | ==> Starting package_linux-libre-64-chromebook()...
# | FATAL ERROR: Couldn't open "arch/arm/boot/zImage": No such file or directory
# | mkimage: Can't read kernel.signed.tmp: Invalid argument
-# [[ $CARCH = armv7h ]] && pkgname+=("$pkgbase-chromebook")
+# [[ $CARCH != x86_64 ]] || pkgname+=("$pkgbase-chromebook") # aarch64 over-ride
for _p in "${pkgname[@]}"; do
eval "package_$_p() {
$(declare -f "_package${_p#$pkgbase}")