%define kernel_base_version 5.10
%define kernel_sublevel .210
%define kernel_extra_version %nil
%define _optlevel 3
Name: kernel-image-mcst-e8c
Version: %kernel_base_version%kernel_sublevel%kernel_extra_version
Release: alt1.19.2
%define kernel_extra_version_numeric 1.0.0
%define krelease %release
%define flavour %( s='%name'; printf %%s "${s#kernel-image-}" )
%define base_flavour %( s='%flavour'; printf %%s "${s%%%%-*}" )
%define sub_flavour %( s='%flavour'; printf %%s "${s#*-}" )
%def_disable docs
## Don't edit below this line ##################################
%define kversion %kernel_base_version%kernel_sublevel%kernel_extra_version
%define modules_dir /lib/modules/%kversion-%flavour-%krelease
%define kheaders_dir %_prefix/include/linux-%kversion-%flavour
%define kbuild_dir %_prefix/src/linux-%kversion-%flavour-%krelease
%define old_kbuild_dir %_prefix/src/linux-%kversion-%flavour
%brp_strip_none /boot/*
%define debug_package %nil
Summary: The Linux kernel (the core of the Linux operating system)
License: GPL-2.0-only
Group: System/Kernel and hardware
Url: http://www.kernel.org/
Source: kernel-image-mcst-e8c-%version.tar
%if "%sub_flavour" == "def"
ExclusiveArch: %e2k
%endif
%if "%sub_flavour" == "e4c"
ExclusiveArch: e2k
%endif
%if "%sub_flavour" == "e1cp" || "%sub_flavour" == "e8c" || "%sub_flavour" == "e8c-nnrt"
ExclusiveArch: e2kv4
%endif
%if "%sub_flavour" == "e8c2"
ExclusiveArch: e2kv5
%endif
%if "%sub_flavour" == "e12c" || "%sub_flavour" == "e16c" || "%sub_flavour" == "e2c3"
ExclusiveArch: e2kv6
%endif
ExclusiveOS: Linux
%define arch_dir e2k
BuildRequires(pre): rpm-build-kernel
BuildRequires: flex
BuildRequires: libdb4-devel
BuildRequires: gcc gcc-c++
BuildRequires: libgmp-devel libmpc-devel
BuildRequires: module-init-tools >= 3.16
BuildRequires: lzma-utils
BuildRequires: libelf-devel
BuildRequires: bc
BuildRequires: rsync
BuildRequires: openssl-devel openssl
BuildRequires: dwarves >= 1.16
BuildRequires: xxd
%if_enabled docs
BuildRequires: python3-module-sphinx /usr/bin/sphinx-build perl-Pod-Usage python3-module-sphinx_rtd_theme
BuildRequires: fontconfig
%endif
%if_enabled ccache
BuildRequires: ccache
%endif
%ifdef use_ccache
BuildRequires: ccache
%endif
Requires: bootloader-utils >= 0.4.26-alt4
Requires: module-init-tools >= 3.16-alt2
Provides: kernel = %kversion
Requires(pre): coreutils
Requires(pre): module-init-tools >= 3.1
Requires(pre): make-initrd
%description
This package contains the Linux kernel that is used to boot and run
your system.
Most hardware drivers for this kernel are built as modules. Some of
these drivers are built separately from the kernel; they are available
in separate packages (kernel-modules-*-%flavour).
This is a standard longterm kernel for E2K arches.
%package -n kernel-vmlinux-%flavour
Summary: vmlinux file for the Linux kernel
Group: Development/Debug
%description -n kernel-vmlinux-%flavour
This package provides raw vmlinux image for those who need it.
%package -n kernel-modules-ide-%flavour
Summary: IDE driver modules (obsoleted by PATA)
Group: System/Kernel and hardware
Provides: kernel-modules-ide-%kversion-%flavour-%krelease = %version-%release
Conflicts: kernel-modules-ide-%kversion-%flavour-%krelease < %version-%release
Conflicts: kernel-modules-ide-%kversion-%flavour-%krelease > %version-%release
Requires(pre): coreutils
Requires(pre): module-init-tools >= 3.1
Requires(pre,post,postun): %name = %EVR
%description -n kernel-modules-ide-%flavour
This package contains IDE driver modules for the Linux kernel
package %name-%version-%release.
These drivers are declared obsolete by the kernel maintainers; PATA
drivers should be used instead. However, the older IDE drivers may be
still useful for some hardware, if the corresponding PATA drivers do
not work well.
Install this package only if you really need it.
%package -n kernel-modules-drm-etnaviv-%flavour
Summary: The DRI modules for Vivante GPUs using free Etnaviv implementation
Group: System/Kernel and hardware
Provides: kernel-modules-drm-etnaviv-%kversion-%flavour-%krelease = %version-%release
Conflicts: kernel-modules-drm-etnaviv-%kversion-%flavour-%krelease < %version-%release
Conflicts: kernel-modules-drm-etnaviv-%kversion-%flavour-%krelease > %version-%release
Requires(pre): coreutils
Requires(pre): module-init-tools >= 3.1
Requires(pre,post,postun): %name = %EVR
%description -n kernel-modules-drm-etnaviv-%flavour
The Direct Rendering Infrastructure, also known as the DRI, is a framework
for allowing direct access to graphics hardware in a safe and efficient
manner. It includes changes to the X server, to several client libraries,
and to the kernel. The first major use for the DRI is to create fast
OpenGL implementations.
These are Etnaviv modules for your Vivante GPU on ALT Linux system
%package -n kernel-headers-%flavour
Summary: Header files for the Linux kernel
Group: Development/Kernel
Requires: kernel-headers-common >= 1.1.5
Provides: kernel-headers = %version
%description -n kernel-headers-%flavour
This package makes Linux kernel headers corresponding to the Linux
kernel package %name-%version-%release available for building
userspace programs (if this version of headers is selected by
adjust_kernel_headers).
Since Linux 2.6.18 the kernel build system supports creation of
sanitized kernel headers for use in userspace (by deleting headers
which are not usable in userspace and removing #ifdef __KERNEL__
blocks from installed headers). This package contains sanitized
headers instead of raw kernel headers which were present in some
previous versions of similar packages.
If possible, try to use glibc-kernheaders instead of this package.
%package -n kernel-headers-modules-%flavour
Summary: Headers and other files needed for building kernel modules
Group: Development/Kernel
# dummy provides for external kernel modules on arch-specific kernels
# without them buggy ExclusiveArch may fail
%if "%sub_flavour" != "def"
%ifnarch e2k
Provides: kernel-headers-modules-elbrus-4c
%endif
%ifnarch e2kv4
Provides: kernel-headers-modules-elbrus-8c
Provides: kernel-headers-modules-elbrus-1cp
%endif
%ifnarch e2kv5
Provides: kernel-headers-modules-elbrus-8c2
%endif
%ifnarch e2kv6
Provides: kernel-headers-modules-elbrus-12c
Provides: kernel-headers-modules-elbrus-16c
Provides: kernel-headers-modules-elbrus-2c3
%endif
%endif
%description -n kernel-headers-modules-%flavour
This package contains header files, Makefiles and other parts of the
Linux kernel build system which are needed to build kernel modules for
the Linux kernel package %name-%version-%release.
If you need to compile a third-party kernel module for the Linux
kernel package %name-%version-%release, install this package
and specify %kbuild_dir as the kernel source
directory.
%package -n kernel-doc-%base_flavour
Summary: Linux kernel %kversion-%base_flavour documentation
Group: System/Kernel and hardware
BuildArch: noarch
%description -n kernel-doc-%base_flavour
This package contains documentation files for ALT Linux kernel packages:
* kernel-image-%base_flavour-up-%kversion-%krelease
* kernel-image-%base_flavour-smp-%kversion-%krelease
The documentation files contained in this package may be different
from the similar files in upstream kernel distributions, because some
patches applied to the corresponding kernel packages may change things
in the kernel and update the documentation to reflect these changes.
%package -n kernel-source-%kernel_base_version
Summary: Linux kernel sources for E2K.
Group: Development/Kernel
BuildArch: noarch
# Many packages in Sisyphus require exactly 1.0.0 version :/
Version: 1.0.0
%description -n kernel-source-%kernel_base_version
Kernel sources for the Elbrus Linux kernel %version.
%prep
%setup -n kernel-image-%flavour-%kversion
subst 's/EXTRAVERSION[[:space:]]*=.*/EXTRAVERSION = %kernel_extra_version-%flavour-%krelease/g' Makefile
subst 's/CC.*$(CROSS_COMPILE)gcc/CC := $(shell echo $${GCC_USE_CCACHE:+ccache}) gcc/g' Makefile
# get rid of unwanted files resulting from patch fuzz
find . -name "*.orig" -delete -or -name "*~" -delete
# just in case
:>localversion-rt
# CNIC ftbfs workaround (ilyakurdyukov@; see also mcst#7420)
sed -i "s/hw_context/bnx2x_&/" drivers/net/ethernet/broadcom/bnx2x/bnx2x.h
%build
export ARCH=%arch_dir
export NPROCS=%__nprocs
# cf.: mcst #7701
export CC=cc HOSTCC=cc
KernelVer=%kversion-%flavour-%krelease
echo "Building Kernel $KernelVer"
%make_build V=1 mrproper
%if "%sub_flavour" == "def"
# save kernel sources
pushd ..
rm -rf kernel-source-%kernel_base_version
cp -al %name-%kversion kernel-source-%kernel_base_version
rm -r kernel-source-%kernel_base_version/{config-*,.gear}
tar --owner=root --group=root --mode=u+w,go-w,go+rX -cf \
kernel-source-%kernel_base_version.tar \
kernel-source-%kernel_base_version
rm -rf kernel-source-%kernel_base_version
popd
%ifarch e2kv6
e2k_ver=6
%else
%ifarch e2kv5
e2k_ver=5
%else
%ifarch e2kv4
e2k_ver=4
%else
e2k_ver=3
%endif
%endif
%endif
# set minimal CPU version
sed "s/^CONFIG_E2K_MINVER_V.*=y/CONFIG_E2K_MINVER_V$e2k_ver=y/" \
< config-elbrus-def > .config
# see arch/e2k/configs/build-config
# default to no builtin gpu
scripts/config \
-d MCST_GPU_VIV -d DRM_VIVANTE \
-d DRM_MGA2 -d MGA2_PWM -d MGA2_GPIO \
-d DRM_IMX_HDMI \
-d MCST_GPU_IMGTEC -d IMGTEC \
-d MEM2ALLOC -d HANTRODEC -d BIGE \
-e E2K_PCS_CPUFREQ -e RTC_DRV_DS1307
# leave out cpu models below e2k_ver
scripts/config -e CPU_E16C -e CPU_E12C -e CPU_E2C3
[ "$e2k_ver" = 5 ] && scripts/config -e CPU_E8C2
[ "$e2k_ver" = 4 ] && scripts/config -e CPU_E8C -e CPU_E1CP
[ "$e2k_ver" = 3 ] && scripts/config -e CPU_E2S
[ "$e2k_ver" -ge 6 ] && scripts/config -d CPU_E8C2
[ "$e2k_ver" -ge 5 ] && scripts/config -d CPU_E8C -d CPU_E1CP
[ "$e2k_ver" -ge 4 ] && scripts/config -d CPU_E2S
# trigger version-specific bits
[ "$e2k_ver" -eq 4 ] && scripts/config \
-m MCST_GPU_VIV -m DRM_VIVANTE \
-m DRM_MGA2 -m MGA2_PWM -m MGA2_GPIO \
-m DRM_IMX_HDMI -m E8CPCS
[ "$e2k_ver" -eq 5 ] && scripts/config -m E8CPCS
[ "$e2k_ver" -ge 5 ] && scripts/config -e CPU_HW_CLEAR_RF
[ "$e2k_ver" -lt 6 ] && scripts/config -d KVM -d VIRTUALIZATION
[ "$e2k_ver" -eq 6 ] && scripts/config \
-m DRM_MGA2 -m MGA2_PWM -m MGA2_GPIO \
-m DRM_IMX_HDMI \
-m MCST_GPU_IMGTEC -m IMGTEC \
-m MEM2ALLOC -m HANTRODEC -m BIGE
[ "$e2k_ver" -eq 6 ] && scripts/config \
-e EPIC -e ELDWCXPCS -m MGB -m MXGBE -m PCSM \
-e MMU_PT_V6 -e MMU_SEP_VIRT_SPACE \
-e VIRTUALIZATION -e KVM -e KVM_HV_MMU \
-e KVM_HW_PARAVIRTUALIZATION -e KVM_HW_VIRTUALIZATION \
-e KVM_GUEST_HW_PV -e KVM_GUEST_HW_HCALL -e KVM_SHADOW_PT_ENABLE \
-e KVM_ASYNC_PF -e KVM_NONPAGING_ENABLE -e KVM_PARAVIRT_TLB_FLUSH \
-e KVM_PHYS_PT_ENABLE -e KVM_SHARED_GUEST_VIRT_SPACE -e KVM_TDP_ENABLE
[ "$e2k_ver" -eq 6 ] && scripts/config \
-e VIRTIO -e VIRTIO_CONSOLE -e EARLY_VIRTIO_CONSOLE -m VIRTIO_INPUT \
-e VIRTIO_PCI -e VIRTIO_BLK -m VIRTIO_NET -m VIRTIO_FS
%else # sub_flavour
cat config-mcst-e8c > .config
# FTBFS: cannot open source file "extra_version/patches.i"
scripts/config -d LTTNG
%endif # sub_flavour
# NB: CONFIG_USER_NS is big fat everdark security hole.
#scripts/config -d USER_NS
# mcst's one has that, we just don't need it
scripts/config --set-str LOCALVERSION ""
%make_build V=1 oldconfig
%make_build V=1 zImage
%make_build V=1 modules
echo "Kernel built $KernelVer"
%if_enabled docs
# psdocs, pdfdocs don't work yet
%make_build SPHINXOPTS="-j %__nprocs" V=1 htmldocs
%endif
%install
%if "%sub_flavour" == "def"
# save kernel sources
mkdir -p %kernel_srcdir
mv ../kernel-source-%kernel_base_version.tar %kernel_srcdir/kernel-source-%kernel_base_version.tar
%endif
export ARCH=%arch_dir
KernelVer=%kversion-%flavour-%krelease
install -Dp -m644 System.map %buildroot/boot/System.map-$KernelVer
install -Dp -m755 zImage %buildroot/boot/image-$KernelVer
install -Dp -m755 vmlinux %buildroot/boot/vmlinux-$KernelVer
install -Dp -m644 .config %buildroot/boot/config-$KernelVer
mkdir -p %buildroot/lib/firmware/$KernelVer
%make_build V=1 modules_install INSTALL_MOD_PATH=%buildroot
install -d %buildroot%modules_dir/updates
# e2k: firmware requires manual installation for 5.4
#cp -a firmware/* %buildroot/lib/firmware/$KernelVer
# arch/l is common for arch/e2k
rm -f %buildroot%kbuild_dir/arch/%arch_dir/include/asm-l
mkdir -p %buildroot%kbuild_dir/arch/%arch_dir
mkdir -p %buildroot%kbuild_dir/arch/l
install -d %buildroot%kbuild_dir
cp -a include %buildroot%kbuild_dir/include
cp -a arch/%arch_dir/include %buildroot%kbuild_dir/arch/%arch_dir
cp -a arch/l/include %buildroot%kbuild_dir/arch/l
# drivers-headers install
install -d %buildroot%kbuild_dir/drivers/scsi
install -d %buildroot%kbuild_dir/drivers/md
install -d %buildroot%kbuild_dir/drivers/usb/core
install -d %buildroot%kbuild_dir/drivers/net/wireless
install -d %buildroot%kbuild_dir/net/mac80211
install -d %buildroot%kbuild_dir/kernel
install -d %buildroot%kbuild_dir/lib
cp -a drivers/scsi/scsi.h \
%buildroot%kbuild_dir/drivers/scsi/
cp -a drivers/md/dm*.h \
%buildroot%kbuild_dir/drivers/md/
cp -a drivers/usb/core/*.h \
%buildroot%kbuild_dir/drivers/usb/core/
cp -a drivers/net/wireless/Kconfig \
%buildroot%kbuild_dir/drivers/net/wireless/
cp -a lib/hexdump.c %buildroot%kbuild_dir/lib/
cp -a kernel/workqueue.c %buildroot%kbuild_dir/kernel/
cp -a net/mac80211/ieee80211_i.h \
%buildroot%kbuild_dir/net/mac80211/
cp -a net/mac80211/sta_info.h \
%buildroot%kbuild_dir/net/mac80211/
# Install files required for building external modules (in addition to headers)
KbuildFiles="
Makefile
Module.symvers
arch/%arch_dir/Makefile
arch/l/Makefile
scripts/pnmtologo
scripts/mod/modpost
scripts/mkmakefile
scripts/mkversion
scripts/link-vmlinux.sh
scripts/mod/mk_elfconfig
scripts/kconfig/conf
scripts/mkcompile_h
scripts/makelst
scripts/Makefile.*
scripts/Makefile
scripts/Kbuild.include
scripts/kallsyms
scripts/genksyms/genksyms
scripts/basic/fixdep
scripts/basic/hash
scripts/extract-ikconfig
scripts/conmakehash
scripts/checkversion.pl
scripts/checkincludes.pl
scripts/checkconfig.pl
scripts/bin2c
scripts/gcc-version.sh
scripts/gcc-goto.sh
scripts/module.lds
scripts/recordmcount.pl
scripts/recordmcount.h
scripts/recordmcount.c
scripts/recordmcount
scripts/module-common.lds
scripts/subarch.include
scripts/depmod.sh
scripts/ld-version.sh
scripts/pahole-flags.sh
.config
.kernelrelease
System.map
"
for f in $KbuildFiles; do
[ -e "$f" ] || continue
[ -x "$f" ] && mode=755 || mode=644
install -Dp -m$mode "$f" %buildroot%kbuild_dir/"$f"
done
# Fix symlinks to kernel sources in /lib/modules
rm -f %buildroot%modules_dir/{build,source}
ln -s %kbuild_dir %buildroot%modules_dir/build
# Provide kbuild directory with old name (without %%krelease)
ln -s "$(relative %kbuild_dir %old_kbuild_dir)" %buildroot%old_kbuild_dir
# Provide kernel headers for userspace
%make_build headers_install V=1 INSTALL_HDR_PATH=%buildroot%kheaders_dir
#provide symlink to autoconf.h for back compat
pushd %buildroot%old_kbuild_dir/include/linux
ln -s ../generated/autoconf.h
ln -s ../generated/utsrelease.h
ln -s ../generated/uapi/linux/version.h
popd
# remove *.bin files
rm -f %buildroot%modules_dir/modules.{alias,dep,symbols,builtin}.bin
touch %buildroot%modules_dir/modules.{alias,dep,symbols,builtin}.bin
touch %buildroot%modules_dir/modules.{alias,dep,devname,softdep,symbols}
# install documentation
%if_enabled docs
install -d %buildroot%_docdir/kernel-doc-%base_flavour-%version/
cp -a Documentation/* %buildroot%_docdir/kernel-doc-%base_flavour-%version/
%endif
%set_verify_elf_method none
# blacklist vivante when etnaviv is used
mkdir -p %buildroot/%_sysconfdir/modprobe.d
echo "blacklist vivante" > %buildroot/%_sysconfdir/modprobe.d/blacklist-vivante.conf
%post
blacklist=/etc/modprobe.d/blacklist-ixgbe.conf
[ -f $blacklist ] && mv $blacklist $blacklist.rpmsave ||:
%files
/boot/image-%kversion-%flavour-%krelease
/boot/System.map-%kversion-%flavour-%krelease
/boot/config-%kversion-%flavour-%krelease
/lib/firmware/%kversion-%flavour-%krelease
%modules_dir
%dir %modules_dir/updates
%defattr(0600,root,root,0700)
%exclude %modules_dir/build
%if "%sub_flavour" == "def"
# mcst-* lack this
%exclude %modules_dir/kernel/drivers/ide
%endif
# XXX mcst-* lack this
#exclude %modules_dir/kernel/drivers/gpu/drm/etnaviv
%ghost %modules_dir/modules.alias.bin
%ghost %modules_dir/modules.dep.bin
%ghost %modules_dir/modules.symbols.bin
%ghost %modules_dir/modules.builtin.bin
%files -n kernel-vmlinux-%flavour
/boot/vmlinux-%kversion-%flavour-%krelease
%files -n kernel-headers-%flavour
%kheaders_dir
%files -n kernel-headers-modules-%flavour
%kbuild_dir
%old_kbuild_dir
%dir %modules_dir
%modules_dir/build
%if_enabled doc
%files -n kernel-doc-%base_flavour
%doc %_docdir/kernel-doc-%base_flavour-%version
%endif
%if "%sub_flavour" == "def"
%files -n kernel-modules-ide-%flavour
%modules_dir/kernel/drivers/ide
%files -n kernel-source-%kernel_base_version
%kernel_src/kernel-source-%kernel_base_version.tar
%endif
%changelog
* Mon Mar 25 2024 Michael Shigorin <mike@altlinux.org> 5.10.210-alt1.19.2
- mgb: revert to 5.10-1.12 code (mcst#8775, mcst#8774)
* Mon Mar 25 2024 Michael Shigorin <mike@altlinux.org> 5.10.210-alt1.19.1
- initial 5.10-1.19 spec (based on 5.10.194-alt1.18.1 one)
- updated to 5.10-1.19 mcst source tree