From: Sooyoung Ha Date: Tue, 7 Jun 2016 08:20:45 +0000 (+0900) Subject: packaging: apply packaging directory for rpm build X-Git-Tag: submit/tizen/20160607.132125~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=08157e9524da1fbd01e2036cfb48e2e36317cb36;p=sdk%2Femulator%2Femulator-kernel.git packaging: apply packaging directory for rpm build Change-Id: I508195e771ce0ebeeb949f4c4c865f8d29f483b9 Signed-off-by: Sooyoung Ha --- diff --git a/packaging/emulator-kernel.spec b/packaging/emulator-kernel.spec new file mode 100644 index 000000000000..688cf7df042a --- /dev/null +++ b/packaging/emulator-kernel.spec @@ -0,0 +1,157 @@ +%bcond_with emulator + +%ifarch %{arm} +%define config_name arm_tizen_emul_defconfig +%define buildarch arm +%define imageName zImage +%else +%define config_name tizen_emul_defconfig +%define buildarch x86 +%define imageName bzImage +%endif + +%define abiver 1 +%define build_id %{config_name}.%{abiver} + +#%undefine _missing_build_ids_terminate_build +Name: emulator-kernel +Summary: The Linux Emulator Kernel +Version: 4.4.12 +Release: 1 +License: GPL-2.0 +Group: System Environment/Kernel +Vendor: The Linux Community +URL: http://www.kernel.org +Source0: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{PACKAGE_VERSION}-root +%if %{with emulator} +ExclusiveArch: %{ix86} x86_64 +%else +ExclusiveArch: +%endif + +%define fullVersion %{version} + +#BuildRequires: linux-glibc-devel +#BuildRequires: bc + +Provides: kernel = %{version}-%{release} +Provides: kernel-uname-r = %{fullVersion} + +%description +The Linux Kernel, the operating system core itself + +%package user-headers +Summary: Header files for the Linux kernel for use by glibc +Group: Development/System +Obsoletes: kernel-headers +Provides: kernel-headers = %{version}-%{release} + +%description user-headers +Kernel-headers includes the C header files that specify the interface +between the Linux kernel and userspace libraries and programs. The +header files define structures and constants that are needed for +building most standard programs and are also needed for rebuilding the +glibc package. + +%package devel +Summary: Prebuilt linux kernel for out-of-tree modules +Group: Development/System +Provides: kernel-devel = %{fullVersion} +Provides: kernel-devel-uname-r = %{fullVersion} +Requires: %{name} = %{version}-%{release} + +%description devel +Prebuilt linux kernel for out-of-tree modules. + +%prep +%setup -q + +%build +# 1. Compile sources +make %{config_name} +#make EXTRAVERSION="-%{build_id}" %{?_smp_mflags} + +# 2. Build uImage +#make EXTRAVERSION="-%{build_id}" %{imageName} %{?_smp_mflags} + +# 3. Build modules +make modules %{?_smp_mflags} + +# 4. Create tar repo for build directory +tar cpSf linux-kernel-build-%{fullVersion}.tar . + +%install +QA_SKIP_BUILD_ROOT="DO_NOT_WANT"; export QA_SKIP_BUILD_ROOT + +# 1. Destynation directories +mkdir -p %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} +mkdir -p %{buildroot}/lib/modules/%{fullVersion} +mkdir -p %{buildroot}/boot/ + +# 2. Install uImage, System.map, ... +#install -m 755 arch/%{buildarch}/boot/%{imageName} %{buildroot}/boot/ +#install -m 644 System.map %{buildroot}/boot/System.map-%{fullVersion} +install -m 644 .config %{buildroot}/boot/config-%{fullVersion} + +# 3. Install modules +make INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=%{buildroot} modules_install + +# 4. Install kernel headers +make INSTALL_PATH=%{buildroot} INSTALL_MOD_PATH=%{buildroot} INSTALL_HDR_PATH=%{buildroot}/usr headers_install + +# 5. Restore source and build irectory +tar -xf linux-kernel-build-%{fullVersion}.tar -C %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} +mv %{buildroot}/usr/src/linux-kernel-build-%{fullVersion}/arch/%{buildarch} . +mv %{buildroot}/usr/src/linux-kernel-build-%{fullVersion}/arch/Kconfig . +rm -rf %{buildroot}/usr/src/linux-kernel-build-%{fullVersion}/arch/* +mv %{buildarch} %{buildroot}/usr/src/linux-kernel-build-%{fullVersion}/arch/ +mv Kconfig %{buildroot}/usr/src/linux-kernel-build-%{fullVersion}/arch/ + +# 6. Remove files +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name ".tmp_vmlinux*" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "\.*dtb*tmp" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "*\.*tmp" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "vmlinux" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "bzImage" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "zImage" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "*.cmd" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "*\.ko" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "*\.o" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "*\.S" -exec rm -f {} \; +find %{buildroot}/usr/src/linux-kernel-build-%{fullVersion} -name "*\.c" -not -path "%{buildroot}/usr/src/linux-kernel-build-%{fullVersion}/scripts/*" -exec rm -f {} \; +find %{buildroot}/usr/include -name "\.\.install.cmd" -exec rm -f {} \; +find %{buildroot}/usr/include -name "\.install" -exec rm -f {} \; +find %{buildroot}/usr -name "..install.cmd" -exec rm -f {} \; + +rm -rf %{buildroot}/boot/vmlinux* +rm -rf %{buildroot}/System.map* +rm -rf %{buildroot}/vmlinux* + +# 7. Create symbolic links +rm -f %{buildroot}/lib/modules/%{fullVersion}/build +rm -f %{buildroot}/lib/modules/%{fullVersion}/source +ln -sf /usr/src/linux-kernel-build-%{fullVersion} %{buildroot}/lib/modules/%{fullVersion}/build + +find %{buildroot}/lib/modules/ -name "*.ko" -type f -exec chmod 755 {} \; + +%clean +rm -rf %{buildroot} + +%files user-headers +%defattr (-, root, root) +/usr/include + +%files devel +%defattr (-, root, root) +/usr/src/linux-kernel-build-%{fullVersion} +/lib/modules/%{fullVersion}/modules.* +/lib/modules/%{fullVersion}/build + +%files +#%license COPYING +#/boot/%{imageName} +#/boot/System.map* +/boot/config* +/lib/modules/%{fullVersion}/kernel +/lib/modules/%{fullVersion}/modules.* diff --git a/packaging/kernel-emulator.spec.backup b/packaging/kernel-emulator.spec.backup new file mode 100644 index 000000000000..30d71a14a6bb --- /dev/null +++ b/packaging/kernel-emulator.spec.backup @@ -0,0 +1,408 @@ +# +# Spec written for Tizen Mobile, some bits and pieces originate +# from MeeGo/Moblin/Fedora +# +%bcond_with emulator + +%define upstream_version 3.12.18 + +%if %{with emulator} +%define platform emulator +%endif + +%if !%{defined platform} +%define platform default +%endif + +%define variant %{profile}-%{_arch}-%{platform} +%define kernel_version %{version}-%{release} +%define kernel_full_version %{version}-%{release}-%{variant} +%define arch_32bits i386 i586 i686 %{ix86} + +# Default arch config for tizen per arch (unless overiden after) +%define kernel_image bzImage +%define defconfig tizen_defconfig + +%define dtbs_supported 0 +%define modules_supported 1 +%define trace_supported 1 +%define uboot_supported 0 +%define vdso_supported 1 + + +# Overide per configuration + +%ifarch %{arch_32bits} +%define kernel_arch i386 +%define kernel_arch_subdir arch/x86 +%define defconfig %{profile}_x86_defconfig +%if "%{platform}" == "emulator" +%define defconfig %{kernel_arch}_tizen_emul_defconfig +%define trace_supported 0 +%endif +%endif + +%ifarch x86_64 +%define kernel_arch x86_64 +%define kernel_arch_subdir arch/x86 +%define defconfig %{profile}_%{kernel_arch}_defconfig +%endif + +%ifarch %arm +%define kernel_arch arm +%define kernel_arch_subdir arch/%{kernel_arch} +%define kernel_image zImage +%define vdso_supported 0 +%define modules_supported 0 +%endif + + +Name: kernel-emulator +Summary: Tizen kernel +Group: System/Kernel +License: GPL-2.0 +URL: http://www.kernel.org/ +Version: %{upstream_version} + +# The below is used when we are on an -rc version +#%#define rc_num 6 +#%#define release_ver 0 +#%#define rc_str %{?rc_num:0.rc%{rc_num}}%{!?rc_num:1} +#%if ! 0%{?opensuse_bs} +#Release: 0 +#%else +#Release: 0 +#%endif +Release: 0 + +BuildRequires: module-init-tools +BuildRequires: findutils +BuildRequires: libelf-devel +BuildRequires: binutils-devel +BuildRequires: which +BuildRequires: bc +# net-tools provides the 'hostname' utility which kernel build wants +BuildRequires: net-tools +# The below is required for building perf +BuildRequires: flex +BuildRequires: bison +BuildRequires: libdw-devel +BuildRequires: python-devel +%if %{uboot_supported} +BuildRequires: u-boot-tools +%endif + +%if %{with emulator} +ExclusiveArch: %{arch_32bits} x86_64 armv7l +%else +ExclusiveArch: +%endif + +Source0: emulator-kernel-%{version}.tar.bz2 + +%description +This package contains the Linux kernel for Tizen. + + +%package -n kernel-%{variant} +Summary: Tizen kernel +Group: System/Kernel +Provides: kernel-profile-%{profile} = %{version}-%{release} +Provides: kernel-uname-r = %{kernel_full_version} +Requires(post): /usr/bin/ln +Requires(post): /usr/bin/sort +Requires(post): rpm + +# We use 'setup-scripts-bootloader-conf' in post and postun, so ideally we need to +# have the below here, but this causes gbs/obs build failures like this: +# "have choice for virtual-setup-scripts-bootloader needed by kernel-x86-scripts: setup-extlinux setup-gummiboot" +# The reason is that it will try to install the kernel to the build root, and +# fail with the above error. To fix it one would need to add 'setup-extlinux' +# or 'setup-gummiboot' to 'review.tizen.org/gerrit/scm/meta/build-config'. But +# it is probably not worth the trouble, so I commented out the below two lines. +# -- Artem +#Requires(post): virtual-setup-scripts-bootloader +#Requires(postun): virtual-setup-scripts-bootloader + +#Requires(post): setup-gummiboot +#Requires(postun): setup-gummiboot + +Requires(post): /usr/sbin/depmod +Requires(post): /usr/bin/dracut +Requires(post): /usr/bin/kmod + +Requires(postun): /usr/bin/ln +Requires(postun): /usr/bin/sed +Requires(postun): rpm + +# We can't let RPM do the dependencies automatic because it'll then pick up +# a correct but undesirable perl dependency from the module headers which +# isn't required for the kernel proper to function +AutoReq: no +AutoProv: yes + +%description -n kernel-%{variant} +This package contains the Linux kernel for Tizen (%{profile} profile, architecure %{_arch}) + +%package -n kernel-%{variant}-devel +Summary: Development package for building kernel modules +Group: Development/System +Provides: kernel-devel = %{kernel_full_version} +Provides: kernel-devel-uname-r = %{kernel_full_version} +Requires(post): /usr/bin/find +Requires: %{name} = %{version}-%{release} +AutoReqProv: no + +%description -n kernel-%{variant}-devel +This package provides kernel headers and makefiles sufficient to build modules +against the %{variant} kernel package. + + +%package -n perf +Summary: The 'perf' performance counter tool +Group: System/Kernel +Provides: perf = %{kernel_full_version} +Requires: %{name} = %{version}-%{release} + +%description -n perf +This package provides the "perf" tool that can be used to monitor performance +counter events as well as various kernel internal events. + + + +### +### PREP +### +%prep +# Unpack the kernel tarball +%setup -q -n %{name}-%{version} + + + +### +### BUILD +### +%build +# Make sure EXTRAVERSION says what we want it to say +sed -i "s/^EXTRAVERSION.*/EXTRAVERSION = -%{release}-%{variant}/" Makefile + +# Build perf +%if %trace_supported +make -s -C tools/lib/traceevent ARCH=%{kernel_arch} %{?_smp_mflags} +make -s -C tools/perf WERROR=0 ARCH=%{kernel_arch} +%endif + + +%if %{defined loadaddr} +export LOADADDR=%{loadaddr} +%endif + +# Build kernel and modules +make -s ARCH=%{kernel_arch} %{defconfig} +make %{?_smp_mflags} %{kernel_image} ARCH=%{kernel_arch} + +%if %modules_supported +make -s ARCH=%{kernel_arch} %{?_smp_mflags} modules +%endif + +%if %dtbs_supported +make -s ARCH=%{kernel_arch} %{?_smp_mflags} dtbs +%endif + + + +### +### INSTALL +### +%install +install -d %{buildroot}/boot + +install -m 644 .config %{buildroot}/boot/config-%{kernel_full_version} +install -m 644 System.map %{buildroot}/boot/System.map-%{kernel_full_version} +install -m 755 %{kernel_arch_subdir}/boot/%{kernel_image} %{buildroot}/boot/vmlinuz-%{kernel_full_version} +# Dummy initrd, will not be included in the actual package but needed for files +touch %{buildroot}/boot/initrd-%{kernel_full_version}.img + +%if %modules_supported +make -s ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{buildroot} modules_install KERNELRELEASE=%{kernel_full_version} +%endif + +%if %vdso_supported +make -s ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{buildroot} vdso_install KERNELRELEASE=%{kernel_full_version} +%endif + +%if %dtbs_supported +install -d "%{buildroot}/boot/" +find "arch/%{kernel_arch}/" -iname "*.dtb" -exec install "{}" "%{buildroot}/boot/" \; +%endif + +rm -rf %{buildroot}/lib/firmware + +# And save the headers/makefiles etc for building modules against +# +# This all looks scary, but the end result is supposed to be: +# * all arch relevant include/ files +# * all Makefile/Kconfig files +# * all script/ files + +# Remove existing build/source links and create pristine dirs +rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build +rm -f %{buildroot}/lib/modules/%{kernel_full_version}/source +install -d %{buildroot}/lib/modules/%{kernel_full_version}/build +ln -fs build %{buildroot}/lib/modules/%{kernel_full_version}/source + + +# First, copy all dirs containing Makefile of Kconfig files +cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` %{buildroot}/lib/modules/%{kernel_full_version}/build +install Module.symvers %{buildroot}/lib/modules/%{kernel_full_version}/build/ +install System.map %{buildroot}/lib/modules/%{kernel_full_version}/build/ + +# Then, drop all but the needed Makefiles/Kconfig files +rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/Documentation +rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts +rm -rf %{buildroot}/lib/modules/%{kernel_full_version}/build/include + +# Copy config and scripts +install .config %{buildroot}/lib/modules/%{kernel_full_version}/build/ +cp -a scripts %{buildroot}/lib/modules/%{kernel_full_version}/build +if [ -d %{kernel_arch_subdir}/scripts ]; then + cp -a %{kernel_arch_subdir}/scripts %{buildroot}/lib/modules/%{kernel_full_version}/build/%{kernel_arch_subdir}/ || : +fi +if [ -f %{kernel_arch_subdir}/*lds ]; then + cp -a %{kernel_arch_subdir}/*lds %{buildroot}/lib/modules/%{kernel_full_version}/build/%{kernel_arch_subdir}/ || : +fi +rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts/*.o +rm -f %{buildroot}/lib/modules/%{kernel_full_version}/build/scripts/*/*.o +cp -a --parents %{kernel_arch_subdir}/include %{buildroot}/lib/modules/%{kernel_full_version}/build + +# Copy include files +mkdir -p %{buildroot}/lib/modules/%{kernel_full_version}/build/include +find include/ -mindepth 1 -maxdepth 1 -type d | xargs -I{} cp -a {} %{buildroot}/lib/modules/%{kernel_full_version}/build/include + +# Save the vmlinux file for kernel debugging into the devel package +cp vmlinux %{buildroot}/lib/modules/%{kernel_full_version} + +# Mark modules executable so that strip-to-file can strip them +find %{buildroot}/lib/modules/%{kernel_full_version} -name "*.ko" -type f | xargs --no-run-if-empty chmod 755 + +# Move the devel headers out of the root file system +install -d %{buildroot}/usr/src/kernels +mv %{buildroot}/lib/modules/%{kernel_full_version}/build %{buildroot}/usr/src/kernels/%{kernel_full_version} + +ln -sf /usr/src/kernels/%{kernel_full_version} %{buildroot}/lib/modules/%{kernel_full_version}/build + +# Install perf +install -d %{buildroot} +make -s -C tools/perf DESTDIR=%{buildroot} install +install -d %{buildroot}%{_bindir} +install -d %{buildroot}%{_libexecdir} +mv %{buildroot}/bin/* %{buildroot}%{_bindir} +mv %{buildroot}/libexec/* %{buildroot}%{_libexecdir} +rm %{buildroot}/etc/bash_completion.d/perf + +# Dont package debug files +rm -rf %{buildroot}/usr/lib/debug/.build-id +rm -rf %{buildroot}/usr/lib/debug/lib/traceevent/plugins/*.debug + + + +### +### SCRIPTS +### + +%post -n kernel-%{variant} +if [ -f "/boot/loader/loader.conf" ]; then + # EFI boot with gummiboot + INSTALLERFW_MOUNT_PREFIX="/" /usr/sbin/setup-scripts-gummiboot-conf + # "/etc/installerfw-environment" does not exist in MIC environment, when it + # builds the image. MIC will add boot-loader entries later using the + # 'setup-scripts-boot' script. + if [ -f "/etc/installerfw-environment" ] && \ + [ -x "/usr/sbin/setup-scripts-bootloader-conf" ]; then + /usr/sbin/setup-scripts-bootloader-conf add -f vmlinuz-%{kernel_full_version} + /usr/sbin/setup-scripts-bootloader-conf default -f vmlinuz-%{kernel_full_version} + fi +else + # Legacy boot + last_installed_ver="$(rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant} | sort -r | sed -e 's/[^:]*: \(.*\)/\1/g' | sed -n -e "1p")" + ln -sf vmlinuz-$last_installed_ver-%{variant} /boot/vmlinuz + + if [ -z "$last_installed_ver" ]; then + # Something went wrong, print some diagnostics + printf "%s\n" "Error: cannot find kernel version" 1>&2 + printf "%s\n" "The command was: rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant} | sort -r | sed -e 's/[^:]*: \(.*\)/\1/g' | sed -n -e \"1p\"" 1>&2 + printf "%s\n" "Output of the \"rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant}\" is:" 1>&2 + result="$(rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant})" + printf "%s\n" "$result" 1>&2 + fi +fi + +%{_bindir}/dracut /boot/initrd-%{kernel_full_version}.img %{kernel_full_version} + +%post -n kernel-%{variant}-devel +if [ -x /usr/sbin/hardlink ]; then + cd /usr/src/kernels/%{kernel_full_version} + /usr/bin/find . -type f | while read f; do + hardlink -c /usr/src/kernels/*/$f $f + done +fi + +%postun -n kernel-%{variant} +if [ -f "/boot/loader/loader.conf" ]; then + # EFI boot with gummiboot + INSTALLERFW_MOUNT_PREFIX="/" /usr/sbin/setup-scripts-gummiboot-conf + if [ -f "/etc/installerfw-environment" ] && \ + [ -x "/usr/sbin/setup-scripts-bootloader-conf" ]; then + /usr/sbin/setup-scripts-bootloader-conf remove -f vmlinuz-%{kernel_full_version} + fi + +else + last_installed_ver="$(rpm -q --qf '%{INSTALLTIME}: %{VERSION}-%{RELEASE}\n' kernel-%{variant} | sort -r | sed -e 's/[^:]*: \(.*\)/\1/g' | sed -n -e "1p")" + if [ -n "$last_installed_ver" ]; then + ln -sf vmlinuz-$last_installed_ver-%{variant} /boot/vmlinuz + else + rm -rf /boot/vmlinuz + fi +fi + + + +### +### FILES +### +%files -n kernel-%{variant} +%license COPYING +/boot/vmlinuz-%{kernel_full_version} +/boot/System.map-%{kernel_full_version} +/boot/config-%{kernel_full_version} +%if %modules_supported +%dir /lib/modules/%{kernel_full_version} +/lib/modules/%{kernel_full_version}/kernel +/lib/modules/%{kernel_full_version}/modules.* +%endif +/lib/modules/%{kernel_full_version}/build +/lib/modules/%{kernel_full_version}/source + +%if %vdso_supported +/lib/modules/%{kernel_full_version}/vdso +%endif +%if %dtbs_supported +/boot/*.dtb +%endif +%ghost /boot/initrd-%{kernel_full_version}.img + + +%files -n kernel-%{variant}-devel +%license COPYING +%verify(not mtime) /usr/src/kernels/%{kernel_full_version} +/lib/modules/%{kernel_full_version}/vmlinux + + +%files -n perf +%license COPYING +%{_bindir}/perf +%{_libexecdir}/perf-core +%if %trace_supported +%{_bindir}/trace +/%{_lib}/traceevent/plugins/*.so +%endif