kbuild: rpm-pkg: invoke the kernel build from rpmbuild for binrpm-pkg
[platform/kernel/linux-starfive.git] / scripts / package / mkspec
1 #!/bin/sh
2 #
3 #       Output a simple RPM spec file.
4 #       This version assumes a minimum of RPM 4.13
5 #
6 #       The only gothic bit here is redefining install_post to avoid
7 #       stripping the symbols from files in the kernel which we want
8 #
9 #       Patched for non-x86 by Opencon (L) 2002 <opencon@rio.skydome.net>
10 #
11
12 # how we were called determines which rpms we build and how we build them
13 if [ "$1" = prebuilt ]; then
14         S=DEL
15 else
16         S=
17
18         mkdir -p rpmbuild/SOURCES
19         cp linux.tar.gz rpmbuild/SOURCES
20         cp "${KCONFIG_CONFIG}" rpmbuild/SOURCES/config
21         "${srctree}/scripts/package/gen-diff-patch" rpmbuild/SOURCES/diff.patch
22 fi
23
24 if grep -q CONFIG_MODULES=y include/config/auto.conf; then
25         M=
26 else
27         M=DEL
28 fi
29
30 # We can label the here-doc lines for conditional output to the spec file
31 #
32 # Labels:
33 #  $S: this line is enabled only when building source package
34 #  $M: this line is enabled only when CONFIG_MODULES is enabled
35 sed -e '/^DEL/d' -e 's/^\t*//' <<EOF
36 %define ARCH ${ARCH}
37 %define KERNELRELEASE ${KERNELRELEASE}
38 %define pkg_release $("${srctree}/init/build-version")
39
40 # _arch is undefined if /usr/lib/rpm/platform/*/macros was not included.
41 %{!?_arch: %define _arch dummy}
42 %{!?make: %define make make}
43 %define makeflags %{?_smp_mflags} ARCH=%{ARCH}
44
45         Name: kernel
46         Summary: The Linux Kernel
47         Version: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
48         Release: %{pkg_release}
49         License: GPL
50         Group: System Environment/Kernel
51         Vendor: The Linux Community
52         URL: https://www.kernel.org
53         Source0: linux.tar.gz
54         Source1: config
55         Source2: diff.patch
56         Provides: kernel-%{KERNELRELEASE}
57         BuildRequires: bc binutils bison dwarves
58         BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
59         BuildRequires: gcc make openssl openssl-devel perl python3 rsync
60
61         %define __spec_install_post /usr/lib/rpm/brp-compress || :
62         %define debug_package %{nil}
63
64         %description
65         The Linux Kernel, the operating system core itself
66
67         %package headers
68         Summary: Header files for the Linux kernel for use by glibc
69         Group: Development/System
70         Obsoletes: kernel-headers
71         Provides: kernel-headers = %{version}
72         %description headers
73         Kernel-headers includes the C header files that specify the interface
74         between the Linux kernel and userspace libraries and programs.  The
75         header files define structures and constants that are needed for
76         building most standard programs and are also needed for rebuilding the
77         glibc package.
78
79 $S$M    %package devel
80 $S$M    Summary: Development package for building kernel modules to match the %{version} kernel
81 $S$M    Group: System Environment/Kernel
82 $S$M    AutoReqProv: no
83 $S$M    %description -n kernel-devel
84 $S$M    This package provides kernel headers and makefiles sufficient to build modules
85 $S$M    against the %{version} kernel package.
86 $S$M
87         %prep
88         %setup -q -n linux
89         cp %{SOURCE1} .config
90         patch -p1 < %{SOURCE2}
91
92         %build
93         %{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
94
95         %install
96         mkdir -p %{buildroot}/boot
97         %ifarch ia64
98         mkdir -p %{buildroot}/boot/efi
99         cp \$(%{make} %{makeflags} -s image_name) %{buildroot}/boot/efi/vmlinuz-%{KERNELRELEASE}
100         ln -s efi/vmlinuz-%{KERNELRELEASE} %{buildroot}/boot/
101         %else
102         cp \$(%{make} %{makeflags} -s image_name) %{buildroot}/boot/vmlinuz-%{KERNELRELEASE}
103         %endif
104 $M      %{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} modules_install
105         %{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
106         cp System.map %{buildroot}/boot/System.map-%{KERNELRELEASE}
107         cp .config %{buildroot}/boot/config-%{KERNELRELEASE}
108 $S$M    rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/build
109 $S$M    rm -f %{buildroot}/lib/modules/%{KERNELRELEASE}/source
110 $S$M    %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='\${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
111 $S$M    cd %{buildroot}/lib/modules/%{KERNELRELEASE}
112 $S$M    ln -sf /usr/src/kernels/%{KERNELRELEASE} build
113 $S$M    ln -sf /usr/src/kernels/%{KERNELRELEASE} source
114
115         %clean
116         rm -rf %{buildroot}
117
118         %post
119         if [ -x /sbin/installkernel -a -r /boot/vmlinuz-%{KERNELRELEASE} -a -r /boot/System.map-%{KERNELRELEASE} ]; then
120         cp /boot/vmlinuz-%{KERNELRELEASE} /boot/.vmlinuz-%{KERNELRELEASE}-rpm
121         cp /boot/System.map-%{KERNELRELEASE} /boot/.System.map-%{KERNELRELEASE}-rpm
122         rm -f /boot/vmlinuz-%{KERNELRELEASE} /boot/System.map-%{KERNELRELEASE}
123         /sbin/installkernel %{KERNELRELEASE} /boot/.vmlinuz-%{KERNELRELEASE}-rpm /boot/.System.map-%{KERNELRELEASE}-rpm
124         rm -f /boot/.vmlinuz-%{KERNELRELEASE}-rpm /boot/.System.map-%{KERNELRELEASE}-rpm
125         fi
126
127         %preun
128         if [ -x /sbin/new-kernel-pkg ]; then
129         new-kernel-pkg --remove %{KERNELRELEASE} --rminitrd --initrdfile=/boot/initramfs-%{KERNELRELEASE}.img
130         elif [ -x /usr/bin/kernel-install ]; then
131         kernel-install remove %{KERNELRELEASE}
132         fi
133
134         %postun
135         if [ -x /sbin/update-bootloader ]; then
136         /sbin/update-bootloader --remove %{KERNELRELEASE}
137         fi
138
139         %files
140         %defattr (-, root, root)
141 $M      /lib/modules/%{KERNELRELEASE}
142 $M      %exclude /lib/modules/%{KERNELRELEASE}/build
143 $M      %exclude /lib/modules/%{KERNELRELEASE}/source
144         /boot/*
145
146         %files headers
147         %defattr (-, root, root)
148         /usr/include
149 $S$M
150 $S$M    %files devel
151 $S$M    %defattr (-, root, root)
152 $S$M    /usr/src/kernels/%{KERNELRELEASE}
153 $S$M    /lib/modules/%{KERNELRELEASE}/build
154 $S$M    /lib/modules/%{KERNELRELEASE}/source
155 EOF