From 4982aac7fbe3a7b9be36b67eed700610738e3a44 Mon Sep 17 00:00:00 2001 From: RononDex Date: Fri, 3 Sep 2021 20:46:52 +0200 Subject: [PATCH] New package: linux-surface 5.13.13 New linux kernel for Microsoft Surface devices. Taken from upstream https://github.com/linux-surface/linux-surface --- srcpkgs/linux5.13-surface-dbg | 1 + srcpkgs/linux5.13-surface-headers | 1 + srcpkgs/linux5.13-surface/files | 1 + .../patches/fix-musl-objtool.patch | 16 + srcpkgs/linux5.13-surface/template | 293 ++++++++++++++++++ 5 files changed, 312 insertions(+) create mode 120000 srcpkgs/linux5.13-surface-dbg create mode 120000 srcpkgs/linux5.13-surface-headers create mode 120000 srcpkgs/linux5.13-surface/files create mode 100644 srcpkgs/linux5.13-surface/patches/fix-musl-objtool.patch create mode 100644 srcpkgs/linux5.13-surface/template diff --git a/srcpkgs/linux5.13-surface-dbg b/srcpkgs/linux5.13-surface-dbg new file mode 120000 index 000000000000..ed454b07405a --- /dev/null +++ b/srcpkgs/linux5.13-surface-dbg @@ -0,0 +1 @@ +linux5.13-surface \ No newline at end of file diff --git a/srcpkgs/linux5.13-surface-headers b/srcpkgs/linux5.13-surface-headers new file mode 120000 index 000000000000..ed454b07405a --- /dev/null +++ b/srcpkgs/linux5.13-surface-headers @@ -0,0 +1 @@ +linux5.13-surface \ No newline at end of file diff --git a/srcpkgs/linux5.13-surface/files b/srcpkgs/linux5.13-surface/files new file mode 120000 index 000000000000..d21db3eafabf --- /dev/null +++ b/srcpkgs/linux5.13-surface/files @@ -0,0 +1 @@ +../linux5.13/files \ No newline at end of file diff --git a/srcpkgs/linux5.13-surface/patches/fix-musl-objtool.patch b/srcpkgs/linux5.13-surface/patches/fix-musl-objtool.patch new file mode 100644 index 000000000000..1caeed06c18d --- /dev/null +++ b/srcpkgs/linux5.13-surface/patches/fix-musl-objtool.patch @@ -0,0 +1,16 @@ +objtool is using the headers provided by kernel-libc-headers, which are kernel version 5.10, so +they use __always_inline instead of inline, and musl doesn't define __always_inline (glibc does) + +diff --git a/tools/objtool/Makefile b/tools/objtool/Makefile +index 92ce4fc..d74b931 100644 +--- a/linux-5.13/tools/objtool/Makefile ++++ b/linux-5.13/tools/objtool/Makefile +@@ -30,7 +30,7 @@ INCLUDES := -I$(srctree)/tools/include \ + -I$(srctree)/tools/objtool/include \ + -I$(srctree)/tools/objtool/arch/$(SRCARCH)/include + WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs +-CFLAGS := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS) ++CFLAGS := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS) -D__always_inline=inline + LDFLAGS += $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS) + + # Allow old libelf to be used: diff --git a/srcpkgs/linux5.13-surface/template b/srcpkgs/linux5.13-surface/template new file mode 100644 index 000000000000..045a34451bad --- /dev/null +++ b/srcpkgs/linux5.13-surface/template @@ -0,0 +1,293 @@ +# Template file for 'linux5.13-surface' +pkgname=linux5.13-surface +version=5.13.13 +revision=1 +wrksrc="linux-${version}-surface" +build_wrksrc="linux-${version%.*}" +short_desc="Linux kernel and modules containing patches and drivers for Microsoft Surface series devices" +maintainer="Tino Heuberger " +license="GPL-2.0-only" +homepage="https://github.com/linux-surface/linux-surface" +distfiles="https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${version%.*}.tar.xz + https://cdn.kernel.org/pub/linux/kernel/v5.x/patch-${version}.xz + https://github.com/linux-surface/linux-surface/archive/refs/tags/arch-${version}-3.tar.gz>surface-linux.tar.gz" +checksum="3f6baa97f37518439f51df2e4f3d65a822ca5ff016aa8e60d2cc53b95a6c89d9 + db626e41d43e74f5c26901dc71e19c6792eed902f44abf0a509ca4a9a2617cb8 + a0e62b0268950919d58199da878c3536b35da76745053947e5480a66568bb35f" +skip_extraction="patch-${version}.xz" +python_version=3 +create_wrksrc=yes + +# Only x86_64 is valid for Microsoft Surface devices +archs="x86_64*" + +nodebug=yes # -dbg package is generated below manually +nostrip=yes +noverifyrdeps=yes +noshlibprovides=yes +preserve=yes + +hostmakedepends="tar xz bc elfutils-devel flex gmp-devel kmod libmpc-devel + openssl-devel perl uboot-mkimage cpio pahole python3" + +_kernver="${version}_${revision}-surface" +triggers="kernel-hooks" +kernel_hooks_version="${_kernver}" +versionSplitted=( ${version//./ } ) +majorVersion="${versionSplitted[0]}.${versionSplitted[1]}" +minorVersion="${versionSplitted[0]}.${versionSplitted[1]}.${versionSplitted[2]}" + +# These files could be modified when an external module is built. +mutable_files=" + /usr/lib/modules/${_kernver}/modules.builtin.bin + /usr/lib/modules/${_kernver}/modules.builtin.alias.bin + /usr/lib/modules/${_kernver}/modules.softdep + /usr/lib/modules/${_kernver}/modules.dep + /usr/lib/modules/${_kernver}/modules.dep.bin + /usr/lib/modules/${_kernver}/modules.symbols + /usr/lib/modules/${_kernver}/modules.symbols.bin + /usr/lib/modules/${_kernver}/modules.alias + /usr/lib/modules/${_kernver}/modules.alias.bin + /usr/lib/modules/${_kernver}/modules.devname" + +# reproducible build +export KBUILD_BUILD_TIMESTAMP=$(LC_ALL=C date -ud @${SOURCE_DATE_EPOCH:-0}) +export KBUILD_BUILD_USER=voidlinux +export KBUILD_BUILD_HOST=voidlinux + +if [ "$CROSS_BUILD" ]; then + _cross="CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-" +fi + +pre_patch() { + xzcat $XBPS_SRCDISTDIR/$pkgname-${version}/patch-${version}.xz | patch -Np1 + + # Apply Surface linux patches + for i in ../linux-surface-arch-$minorVersion-3/patches/${majorVersion}/*.patch; do patch -Np1 < $i; done +} + +do_configure() { + # If there's a file called -dotconfig, use it to + # configure the kernel; otherwise use arch defaults and all stuff + # as modules (allmodconfig). + local arch subarch + + case "$XBPS_TARGET_MACHINE" in + x86_64*) arch=x86_64;; + esac + + if [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom ]; then + msg_normal "Detected a custom .config file for your arch, using it.\n" + cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig-custom dotconfig.config + make ${makejobs} ARCH=$arch ${_cross} oldconfig + elif [ -f ${FILESDIR}/${subarch:-$arch}-dotconfig ]; then + msg_normal "Detected a .config file for your arch, using it.\n" + cp -f ${FILESDIR}/${subarch:-$arch}-dotconfig dotconfig.config + + cp -f $XBPS_BUILDDIR/linux-$majorVersion/linux-surface-arch-$minorVersion-3/configs/surface-${majorVersion}.config surface-linux.config + export KCONFIG_CONFIG=$XBPS_BUILDDIR/linux-$majorVersion/linux-$majorVersion/.config + ./scripts/kconfig/merge_config.sh -m dotconfig.config surface-linux.config + make ${makejobs} ARCH=$arch ${_cross} oldconfig + fi + # Always use our revision to CONFIG_LOCALVERSION to match our pkg version. + sed -i -e "s|^\(CONFIG_LOCALVERSION=\).*|\1\"_${revision}-surface\"|" .config +} + +do_build() { + local arch _args + + case "$XBPS_TARGET_MACHINE" in + x86_64*) _args="bzImage modules"; arch=x86_64;; + esac + export LDFLAGS= + make ARCH=$arch ${_cross} ${makejobs} prepare + make ARCH=$arch ${_cross} ${makejobs} ${_args} +} + +do_install() { + local arch subarch _args hdrdest + + case "$XBPS_TARGET_MACHINE" in + x86_64*) arch=x86; subarch=x86_64;; + esac + + # Run depmod after compressing modules - makes depmod.sh a noop + sed -i '2iexit 0' scripts/depmod.sh + + # Install kernel, firmware and modules + make ${makejobs} ARCH=${subarch:-$arch} INSTALL_MOD_PATH=${DESTDIR} ${_cross} modules_install + + hdrdest=${DESTDIR}/usr/src/kernel-headers-${_kernver} + + vinstall .config 644 boot config-${_kernver} + vinstall System.map 644 boot System.map-${_kernver} + + case "$arch" in + x86) + vinstall arch/x86/boot/bzImage 644 boot vmlinuz-${_kernver} + ;; + esac + + # Switch to /usr. + vmkdir usr + mv ${DESTDIR}/lib ${DESTDIR}/usr + cd ${DESTDIR}/usr/lib/modules/${_kernver} + rm -f source build + ln -sf ../../../src/kernel-headers-${_kernver} build + + cd ${wrksrc}/${build_wrksrc} + # Install required headers to build external modules + install -Dm644 Makefile ${hdrdest}/Makefile + install -Dm644 kernel/Makefile ${hdrdest}/kernel/Makefile + install -Dm644 .config ${hdrdest}/.config + for file in $(find . -name Kconfig\*); do + mkdir -p ${hdrdest}/$(dirname $file) + install -Dm644 $file ${hdrdest}/${file} + done + for file in $(find arch/${subarch:-$arch} scripts -name module.lds -o -name Kbuild.platforms -o -name Platform); do + mkdir -p ${hdrdest}/$(dirname $file) + install -Dm644 $file ${hdrdest}/${file} + done + mkdir -p ${hdrdest}/include + # Remove firmware stuff provided by the "linux-firmware" pkg. + rm -rf ${DESTDIR}/usr/lib/firmware + + for i in acpi asm-generic clocksource config crypto drm generated linux vdso \ + math-emu media net pcmcia scsi sound trace uapi video xen dt-bindings; do + if [ -d include/$i ]; then + cp -a include/$i ${hdrdest}/include + fi + done + + cd ${wrksrc}/${build_wrksrc} + mkdir -p ${hdrdest}/arch/${arch} + cp -a arch/${arch}/include ${hdrdest}/arch/${arch} + + # Remove helper binaries built for host, + # if generated files from the scripts/ directory need to be included, + # they need to be copied to ${hdrdest} before this step + if [ "$CROSS_BUILD" ]; then + make ${makejobs} ARCH=${subarch:-$arch} ${_cross} _mrproper_scripts + # remove host specific objects as well + find scripts -name '*.o' -delete + fi + + # Copy files necessary for later builds, like nvidia and vmware + cp Module.symvers ${hdrdest} + cp -a scripts ${hdrdest} + mkdir -p ${hdrdest}/security/selinux + cp -a security/selinux/include ${hdrdest}/security/selinux + mkdir -p ${hdrdest}/tools/include + cp -a tools/include/tools ${hdrdest}/tools/include + + mkdir -p ${hdrdest}/arch/${arch}/kernel + cp arch/${arch}/Makefile ${hdrdest}/arch/${arch} + if [ "$arch" = "x86" ]; then + mkdir -p ${hdrdest}/arch/x86/kernel + cp arch/x86/kernel/asm-offsets.s ${hdrdest}/arch/x86/kernel + fi + + # add headers for lirc package + # pci + for i in bt8xx cx88 saa7134; do + mkdir -p ${hdrdest}/drivers/media/pci/${i} + cp -a drivers/media/pci/${i}/*.h ${hdrdest}/drivers/media/pci/${i} + done + # usb + for i in cpia2 em28xx pwc; do + mkdir -p ${hdrdest}/drivers/media/usb/${i} + cp -a drivers/media/usb/${i}/*.h ${hdrdest}/drivers/media/usb/${i} + done + # i2c + mkdir -p ${hdrdest}/drivers/media/i2c + cp drivers/media/i2c/*.h ${hdrdest}/drivers/media/i2c + for i in cx25840; do + mkdir -p ${hdrdest}/drivers/media/i2c/${i} + cp -a drivers/media/i2c/${i}/*.h ${hdrdest}/drivers/media/i2c/${i} + done + + # Add md headers + mkdir -p ${hdrdest}/drivers/md + cp drivers/md/*.h ${hdrdest}/drivers/md + + # Add inotify.h + mkdir -p ${hdrdest}/include/linux + cp include/linux/inotify.h ${hdrdest}/include/linux + + # Add wireless headers + mkdir -p ${hdrdest}/net/mac80211/ + cp net/mac80211/*.h ${hdrdest}/net/mac80211 + + # add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new + mkdir -p ${hdrdest}/drivers/media/dvb-frontends + cp drivers/media/dvb-frontends/lgdt330x.h \ + ${hdrdest}/drivers/media/dvb-frontends/ + cp drivers/media/i2c/msp3400-driver.h ${hdrdest}/drivers/media/i2c/ + + # add dvb headers + mkdir -p ${hdrdest}/drivers/media/usb/dvb-usb + cp drivers/media/usb/dvb-usb/*.h ${hdrdest}/drivers/media/usb/dvb-usb/ + mkdir -p ${hdrdest}/drivers/media/dvb-frontends + cp drivers/media/dvb-frontends/*.h ${hdrdest}/drivers/media/dvb-frontends/ + mkdir -p ${hdrdest}/drivers/media/tuners + cp drivers/media/tuners/*.h ${hdrdest}/drivers/media/tuners/ + + # Add xfs and shmem for aufs building + mkdir -p ${hdrdest}/fs/xfs/libxfs + mkdir -p ${hdrdest}/mm + cp fs/xfs/libxfs/xfs_sb.h ${hdrdest}/fs/xfs/libxfs/xfs_sb.h + + # Add objtool binary, needed to build external modules with dkms + case "$XBPS_TARGET_MACHINE" in + x86_64*) + mkdir -p ${hdrdest}/tools/objtool + cp tools/objtool/objtool ${hdrdest}/tools/objtool + ;; + esac + + # Remove unneeded architectures + case "$arch" in + i386|x86_64) _args="arm* m* p*";; + esac + for arch in alpha avr32 blackfin cris frv h8300 \ + ia64 s* um v850 xtensa ${_args}; do + rm -rf ${hdrdest}/arch/${arch} + done + # Keep arch/x86/ras/Kconfig as it is needed by drivers/ras/Kconfig + mkdir -p ${hdrdest}/arch/x86/ras + cp -a arch/x86/ras/Kconfig ${hdrdest}/arch/x86/ras/Kconfig + + # Extract debugging symbols and compress modules + msg_normal "$pkgver: extracting debug info and compressing modules, please wait...\n" + install -Dm644 vmlinux ${DESTDIR}/usr/lib/debug/boot/vmlinux-${_kernver} + ( + cd ${DESTDIR} + export DESTDIR + find ./ -name '*.ko' -print0 | \ + xargs -0r -n1 -P ${XBPS_MAKEJOBS} ${FILESDIR}/mv-debug + ) + # ... and run depmod again. + depmod -b ${DESTDIR}/usr -F System.map ${_kernver} +} +linux5.13-surface-headers_package() { + preserve=yes + nostrip=yes + noshlibprovides=yes + short_desc+=" - source headers for 3rd party modules" + pkg_install() { + vmove usr/src + vmove usr/lib/modules/${_kernver}/build + } +} +linux5.13-surface-dbg_package() { + preserve=yes + nostrip=yes + noverifyrdeps=yes + noshlibprovides=yes + repository=debug + short_desc+=" - debugging symbols" + pkg_install() { + vmove usr/lib/debug + vmove "boot/System.map-${_kernver}" + } +}