diff options
Diffstat (limited to 'libre/linux-libre-64/PKGBUILD')
-rw-r--r-- | libre/linux-libre-64/PKGBUILD | 197 |
1 files changed, 149 insertions, 48 deletions
diff --git a/libre/linux-libre-64/PKGBUILD b/libre/linux-libre-64/PKGBUILD index 37a59db10..b3e70eb8d 100644 --- a/libre/linux-libre-64/PKGBUILD +++ b/libre/linux-libre-64/PKGBUILD @@ -1,29 +1,61 @@ +# Contributor: David P. <megver83@parabola.nu> +# Contributor: André Silva <emulatorman@hyperbola.info> +# Contributor: Márcio Silva <coadde@hyperbola.info> +# Contributor: fauno <fauno@parabola.nu> +# Contributor: Sorin-Mihai Vârgolici <smv@yobicore.org> +# Contributor: Michał Masłowski <mtjm@mtjm.eu> +# Contributor: Luke R. <g4jc@openmailbox.org> +# Contributor: Andreas Grapentin <andreas@grapentin.org> # 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 -# once parabola has an 'aarch64' build target and repos. +# Based on linux package +# Based on linux-libre package, actually - megver83 will become maintainer eventually + +# WIP: This PKGBUILD is derived from the 'linux-libre' PKGBUILD, +# and includes a lot of unused cruft, to minimize the diff. +# Eventually, these differences can be merged into linux-libre, +# once parabola has an 'aarch64' build target and repos. +# +# For now, 'aarch64' is not yet a valid parabola target. +# This PKGBUILD exists only for making an 'aarch64' kernel for use with +# parabola armv7h systems. This PKGBUILD is intended to be cross-compiled +# only from an armv7h librechroot. The per-arch mechanism for armv7h +# is over-ridden for the special purpose of the cross-compilation. +# +# The makedepends_armv7h, source_armv7h, and sha512sums_armv7h arrays +# (also source_aarch64 and sha512sums_aarch64 obviously), and the comments: +# '# cross-compile over-ride' and +# '# TODO: merge into 'linux-libre' PKGBUILD', +# indicate code that would eventually be deleted, merged into, +# or associated with $CARCH: 'aarch64', if/when aarch64 becomes a valid target. +# All other LOCs of consequence in this file, +# 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 are intended to become aarch64-specific, +# or exist only for cross-compiling the aarch64 kernel for armv7h systems. _replacesarchkernel=('linux%') # '%' gets replaced with kernel suffix _replacesoldkernels=() # '%' gets replaced with kernel suffix _replacesoldmodules=() # '%' gets replaced with kernel suffix -pkgbase=linux-libre-64 +pkgbase=linux-libre-64 # cross-compile over-ride pkgver=5.18.5 -pkgrel=2.test -pkgdesc="64bit Linux-libre for Parabola $CARCH" +pkgrel=2 +pkgdesc="The Linux-libre kernel and modules" # TODO: merge into 'linux-libre' PKGBUILD +pkgdesc+=' 64-bit (aarch64) for Parabola armv7h' # cross-compile over-ride rcnver=5.18.2 rcnrel=armv7-x6 url='https://linux-libre.fsfla.org/' -arch=(armv7h i686) +arch=(i686 x86_64 armv7h) +arch=(armv7h) # cross-compile 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_armv7h+=(aarch64-linux-gnu-gcc-initial) # cross-compile over-ride options=('!strip') _srcname=linux-5.18 source=( @@ -52,7 +84,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 (armv7h) 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 +92,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_armv7h=( ${source_aarch64[*]} ) # cross-compile over-ride validpgpkeys=( '474402C8C582DAFBE389C427BCB7CF877E7D47A7' # Alexandre Oliva '6DB9C4B4F0D8C0DC432CF6E4227CA7C556B2BA78' # David P. @@ -102,21 +137,26 @@ sha512sums_armv7h=('5a75b12dd386940a0bf1be630d45a514ef3c32289ec5976988764baa8483 'a1072dd808c63592178cc01ea3c36de946f277fb451b13c34f51a5ac134cde4a8a4d57487132af1c6d7b5820842cdda9dc4edb3da85d33bd02bf87a032c3263a' '85b2e16a930b8066990c42f973d386dc3c6d62fdf3d1289bbb51df3df296c26f30051162fba49a42d38f71f05de926aa8c065097f14bd8e9f8e28a52949ead00' '2e99582d8b670b6c6b27add14b60e957cbcf9cd6aae40491bd9dea6ac455c0ade0bbee21e3bdfb5e06ce83ad27c5a788404b05bf7ac93831ca18d2e60a67017c' - '4224779106cc520dc2c431322d9693cc968476706854ae9630611cf2896c48a34ca11bf31a4c3995573a128cf5838a6763bac86eb4cbaf509ade9b6a83a24369' - '5b77c587cf2ffb60acf1d9eb43330983548c7e81a53e0ffd2b04962a99441a0000d631ff77c245c7062afc2c8368d996a2456496d42dcb658f330e5083e5e029' - 'bc7b70863929737346fe6757373897391b43af36bb6884d5351a95aca0f9120f2d2cf9b9c2c6426a440c6b394e9fb334c280711d64081563322a834ecdfb2ba6') + '5b77c587cf2ffb60acf1d9eb43330983548c7e81a53e0ffd2b04962a99441a0000d631ff77c245c7062afc2c8368d996a2456496d42dcb658f330e5083e5e029') +sha512sums_aarch64=('bc7b70863929737346fe6757373897391b43af36bb6884d5351a95aca0f9120f2d2cf9b9c2c6426a440c6b394e9fb334c280711d64081563322a834ecdfb2ba6' + '69e81aff3ac5aada75f7330e8c82d0a6aa229585b3f442b2e1a9b86681b0eadc925408d5e2377026599fb0dee72d29043eca4d072b0e2606adc34c872e95c7d6' + '4224779106cc520dc2c431322d9693cc968476706854ae9630611cf2896c48a34ca11bf31a4c3995573a128cf5838a6763bac86eb4cbaf509ade9b6a83a24369') +sha512sums_armv7h=( ${sha512sums_aarch64[*]} ) # cross-compile over-ride _replacesarchkernel=("${_replacesarchkernel[@]/\%/${pkgbase#linux-libre}}") _replacesoldkernels=("${_replacesoldkernels[@]/\%/${pkgbase#linux-libre}}") _replacesoldmodules=("${_replacesoldmodules[@]/\%/${pkgbase#linux-libre}}") +_replacesarchkernel=("${_replacesarchkernel[@]/-64/}") # cross-compile over-ride case "$CARCH" in - i686) KARCH=x86;CROSS_COMPILE=x86_64-pc-linux-gnu-;; - armv7h) KARCH=arm64;CROSS_COMPILE=aarch64-linux-gnu-;; + armv7h) KARCH=arm64 ; CROSS_COMPILE=aarch64-linux-gnu- ;; # cross-compile over-ride + aarch64) KARCH=arm64;; # TODO: merge into 'linux-libre' PKGBUILD + i686|x86_64) KARCH=x86;; + armv7h) KARCH=arm;; esac -export STRIP=${CROSS_COMPILE}strip export KBUILD_BUILD_HOST=parabola export KBUILD_BUILD_USER=$pkgbase +export KBUILD_BUILD_USER=${pkgbase/-64/} # cross-compile over-ride export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" prepare() { @@ -158,6 +198,18 @@ prepare() { done fi + if [ "$CARCH" = "aarch64" ]; then # TODO: merge into 'linux-libre' PKGBUILD + # TODO: better yet, all of these per-arch patching routines should be DRY-ed out + 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,23 +220,24 @@ prepare() { done echo "Setting config..." - case "$CARCH" in - i686) cp ../config.x86_64 .config;; + cp ../config.$CARCH .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 - make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE olddefconfig + if [[ "$KARCH" == 'arm64' ]] # cross-compile over-ride + then cp ../config.aarch64 .config ; echo 'CONFIG_COMPAT=y' >> .config ; # cross-compile over-ride + fi # cross-compile over-ride + make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE olddefconfig # cross-compile over-ride + diff -u ../config.$CARCH .config || : - make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE -s kernelrelease > version + make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE -s kernelrelease > version # cross-compile over-ride echo "Prepared $pkgbase version $(<version)" } build() { cd $_srcname - make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE all - make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE htmldocs + make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE all # cross-compile over-ride + make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE htmldocs # cross-compile over-ride } _package() { @@ -193,10 +246,22 @@ _package() { optdepends=('wireless-regdb: to set the correct wireless channels of your country' 'linux-libre-firmware: firmware images needed for some devices') provides=(VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE) + conflicts=() # TODO: merge into 'linux-libre' PKGBUILD (conflicts array is appended before declared) replaces=(virtualbox-guest-modules-arch wireguard-arch) provides+=("${_replacesarchkernel[@]/%/=$pkgver}" "LINUX-ABI_VERSION=$pkgver") conflicts+=("${_replacesarchkernel[@]}" "${_replacesoldkernels[@]}" "${_replacesoldmodules[@]}") replaces+=("${_replacesarchkernel[@]}" "${_replacesoldkernels[@]}" "${_replacesoldmodules[@]}") + # cross-compile over-rides + # NOTE: Above is providing/replacing the archarm armv7h 'linux' with the armv7h 'linux-libre'. + # We do not want this aarch64 'linux-libre-64' to provide nor replace the archarm armv7h 'linux'; + # for the obvious reason. Anyways, the parabola armv7h 'linux-libre' serves that purpose. + # Below is providing/replacing 'linux-libre' and the obsoleted parabola 'linux-libre-aarch64'. + # These are defined analogously in _package-headers(), _package-docs(), and _package-chromebook(). + conflicts=( ${conflicts[*]/linux*/} ) # cross-compile over-ride + replaces=( ${replaces[*]/linux*/} ) # cross-compile over-ride + provides_armv7h=( linux-libre ) # cross-compile over-ride + conflicts_armv7h=( linux-libre linux-libre-aarch64 ) # cross-compile over-ride + replaces_armv7h=( linux-libre linux-libre-aarch64 ) # cross-compile over-ride cd $_srcname local kernver="$(<version)" @@ -205,26 +270,31 @@ _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" + # The default arm64 image target is 'Image.gz' (per `make -s image_name`); + # but some u-boot configs/versions don't support that, so we build 'Image' instead. + # TODO: merge into 'linux-libre' PKGBUILD + [[ "$KARCH" == 'arm64' ]] && \ + install -Dm644 arch/$KARCH/boot/Image "$modulesdir/vmlinuz" || \ + install -Dm644 "$(make -s image_name)" "$modulesdir/vmlinuz" + + # FIXME: aarch64 - the kernel is not installed under /boot + if [[ "$KARCH" == 'arm64' && ! -f "$pkgdir/boot/Image" ]] + then echo "FIXME: kernel was not installed to \$pkgdir/boot" + install -Dm644 "$modulesdir/vmlinuz" "$pkgdir/boot/vmlinuz-${basename}-64" fi # Used by mkinitcpio to name the kernel echo "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase" echo "Installing modules..." - make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 modules_install + make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 modules_install # cross-compile over-ride # remove build and source links rm "$modulesdir"/{source,build} if [ "$CARCH" = "armv7h" ]; then echo "Installing device tree binaries..." - make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE INSTALL_DTBS_PATH="$pkgdir/boot/dtbs/$pkgbase" dtbs_install + make ARCH=$KARCH CROSS_COMPILE=$CROSS_COMPILE INSTALL_DTBS_PATH="$pkgdir/boot/dtbs/$pkgbase" dtbs_install # cross-compile over-ride # armv7h presets only work with ALL_kver=$kernver backup=("etc/mkinitcpio.d/$pkgbase.preset") @@ -240,6 +310,11 @@ _package-headers() { provides=("${_replacesarchkernel[@]/%/-headers=$pkgver}") conflicts=("${_replacesarchkernel[@]/%/-headers}" "${_replacesoldkernels[@]/%/-headers}") replaces=("${_replacesarchkernel[@]/%/-headers}" "${_replacesoldkernels[@]/%/-headers}") + # cross-compile over-rides - see note in _package() + conflicts=() # cross-compile over-ride + replaces=() # cross-compile over-ride + conflicts_armv7h=( linux-libre-headers linux-libre-aarch64-headers ) # cross-compile over-ride + replaces_armv7h=( linux-libre-headers linux-libre-aarch64-headers ) # cross-compile over-ride cd $_srcname local builddir="$pkgdir/usr/lib/modules/$(<version)/build" @@ -269,6 +344,19 @@ _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 + [[ "$KARCH" != 'arm64' ]] && # aarch64 over-ride + 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 @@ -303,23 +391,25 @@ _package-headers() { echo "Removing loose objects..." find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete + strip() { ${CROSS_COMPILE}strip "${@}" ; } ; # cross-compile over-ride + echo "Stripping build tools..." local file while read -rd '' file; do case "$(file -bi "$file")" in application/x-sharedlib\;*) # Libraries (.so) - ${STRIP} -v $STRIP_SHARED "$file" ;; + strip -v $STRIP_SHARED "$file" ;; application/x-archive\;*) # Libraries (.a) - ${STRIP} -v $STRIP_STATIC "$file" ;; + strip -v $STRIP_STATIC "$file" ;; application/x-executable\;*) # Binaries - ${STRIP} -v $STRIP_BINARIES "$file" ;; + strip -v $STRIP_BINARIES "$file" ;; application/x-pie-executable\;*) # Relocatable binaries - ${STRIP} -v $STRIP_SHARED "$file" ;; + strip -v $STRIP_SHARED "$file" ;; esac done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0) echo "Stripping vmlinux..." - ${STRIP} -v $STRIP_STATIC "$builddir/vmlinux" + strip -v $STRIP_STATIC "$builddir/vmlinux" echo "Adding symlink..." mkdir -p "$pkgdir/usr/src" @@ -331,6 +421,11 @@ _package-docs() { provides=("${_replacesarchkernel[@]/%/-docs=$pkgver}") conflicts=("${_replacesarchkernel[@]/%/-docs}" "${_replacesoldkernels[@]/%/-docs}") replaces=("${_replacesarchkernel[@]/%/-docs}" "${_replacesoldkernels[@]/%/-docs}") + # cross-compile over-rides - see note in _package() + conflicts=() # cross-compile over-ride + replaces=() # cross-compile over-ride + conflicts_armv7h=(linux-libre-docs linux-libre-aarch64-docs) # cross-compile over-ride + replaces_armv7h=( linux-libre-docs linux-libre-aarch64-docs) # cross-compile over-ride cd $_srcname local builddir="$pkgdir/usr/lib/modules/$(<version)/build" @@ -349,12 +444,17 @@ _package-docs() { } _package-chromebook() { - pkgdesc="Experimental $pkgdesc kernel sign for Veyron Chromebooks" - depends=(linux-libre-64=$pkgver) - 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 + pkgdesc="$pkgdesc kernel sign for Veyron Chromebooks" + depends=(linux-libre=$pkgver) + provides=("${_replacesarchkernel[@]/%/-armv7-chromebook=$pkgver}") + conflicts=("${_replacesarchkernel[@]/%/-armv7-chromebook}" "${_replacesoldkernels[@]/%/-armv7-chromebook}") + replaces=("${_replacesarchkernel[@]/%/-armv7-chromebook}" "${_replacesoldkernels[@]/%/-armv7-chromebook}") + install=$pkgbase-chromebook.install + # NOTE: when aarch64 becomes a supported target, 'armv7' above should be changed to "${CARCH}" + depends=( ${depends[*]/linux-libre/${pkgbase}} ) # cross-compile over-ride + provides=( ${provides[*]/armv7/aarch64} ) # cross-compile over-ride + conflicts=( ${conflicts[*]/armv7/aarch64} ) # cross-compile over-ride + replaces=( ${replaces[*]/armv7/aarch64} ) # cross-compile over-ride cd $_srcname @@ -363,12 +463,13 @@ _package-chromebook() { dd if=/dev/zero of=bootloader.bin bs=512 count=1 echo 'console=tty0 init=/sbin/init root=PARTUUID=%U/PARTNROFF=1 rootwait rw noinitrd' > cmdline + # TODO: merge into 'linux-libre' PKGBUILD (--arch ${KARCH}) echo "Creating kernel sign..." vbutil_kernel \ --pack vmlinux.kpart \ --version 1 \ --vmlinuz kernel.signed \ - --arch aarch64 \ + --arch ${KARCH} \ --keyblock ../kernel.keyblock \ --signprivate ../kernel_data_key.vbprivk \ --config cmdline \ |