]> git.pld-linux.org Git - packages/rpm-pld-macros.git/blame - macros.kernel
pass c/cxx/ld flags in rust macros; rel 4
[packages/rpm-pld-macros.git] / macros.kernel
CommitLineData
1c834f14
JR
1# vim:ts=4 sw=4 noet ft=spec
2# Kernel specific macro definitions.
1c834f14
JR
3
4%__modinfo /sbin/modinfo
5
1c834f14
JR
6# Alternative kernel type/version
7%_alt_kernel %{nil}%{?alt_kernel:-%{?alt_kernel}}
8%_build_kernels %{nil}%{?build_kernels:%{?build_kernels}}%{!?build_kernels:%{?alt_kernel}}
9
f1f5d044
JR
10# Macros for building kernel packages for multiple kernels from same spec
11# Usage:
12#
13# %{expand:%buildrequires_kernel kernel%%{_alt_kernel}-module-build >= 3:2.6.20.2}}
14# %{expand:%create_kernel_packages}
15# %{expand:%build_kernel_packages}
16# %{expand:%install_kernel_packages}
17#
18%buildrequires_kernel() %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
ccab679d 19echo %%undefine alt_kernel \
f1f5d044 20[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
3a27fcef 21echo "BuildRequires: %{*}" \
f1f5d044 22done)
1c834f14
JR
23
24%create_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
25echo %%undefine alt_kernel \
26[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
27echo %%kernel_pkg \
28done)
29
30%build_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
31echo %%undefine alt_kernel \
32[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
33echo %%build_kernel_pkg \
34done)
35
36%install_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \
37echo %%undefine alt_kernel \
38[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
39echo %%install_kernel_pkg \
40done)
41
42# The directory holding Linux kernel sources
43%_kernelsrcdir /usr/src/linux%{_alt_kernel}
44
45# rpm -qf on kernel version.h file
46%__kernel_qf() %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%*' -f include/linux/version.h 2>/dev/null | grep -v 'is not'); echo ${R:-ERROR})
47
48# kernel %{name} and kernel %{epoch}:%{version}-%{release} macro respecing alt_kernel
49%kernel_name %(N=%{__kernel_qf %{N}}; echo ${N%%-headers})
50%kernel_version %{__kernel_qf %|E?{%{E}:}|%{V}-%{R}}
51
52# -n drm to generate kernel%{_alt_kernel}-drm dependency
53%releq_kernel(n:) %{kernel_name}%{?-n:-%{-n*}} = %{kernel_version}
54%releq_kernel_up(n:) %{kernel_name}-up%{?-n:-%{-n*}} = %{kernel_version}
55%releq_kernel_smp(n:) %{kernel_name}-smp%{?-n:-%{-n*}} = %{kernel_version}
56
57# -s post to generate Requires(post) dependency
58%requires_releq_kernel(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel
59%requires_releq_kernel_up(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_up
60%requires_releq_kernel_smp(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_smp
61
e36bf111
JR
62# kernel version-release handling, `uname -r` used for building/installing kernel modules
63%_kernel_ver %( \\
1c834f14
JR
64 Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && \\
65 awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || \\
66 awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\
67 Z=${Z:-$(awk -F' = ' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END {printf("%d.%d.%d%s", v, p, s, e)}' \\
68 %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\
69 echo ${Z:-ERROR}; \\
70)
e36bf111
JR
71# left for compatibility
72%__kernel_ver %{_kernel_ver}
73
74# package version to be used in @release field
75%_kernel_ver_str %( \\
76 Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && \\
77 awk -F'"' '/UTS_RELEASE/{gsub(/-/,"_",$2); print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || \\
78 awk -F'"' '/UTS_RELEASE/{gsub(/-/,"_",$2); print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\
79 Z=${Z:-$(awk -F' = ' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END {z=sprintf("%d.%d.%d%s", v, p, s, e); gsub(/-/,"_",z); print z}' \\
80 %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\
81 echo ${Z:-ERROR}; \\
82)
1c834f14
JR
83
84%_kernel_version_code %( \\
85 Z=$(awk '/LINUX_VERSION_CODE/{print $3}' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null); \\
34789b3e 86 echo ${Z:-16777215}; \\
1c834f14
JR
87)
88
89%_kernel_version_magic() %(echo $((%{1} * 65536 + %{2} * 256 + %{3})))
90
d9c557d8
JR
91%_host_base_arch %{expand:%%global _host_base_arch %(echo %{_host_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/;s/x32/x86_64/;s/sparcv./sparc/;s/arm.*/arm/')}%_host_base_arch
92%_target_base_arch %{expand:%%global _target_base_arch %(echo %{_target_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/;s/x32/x86_64/;s/sparcv./sparc/;s/arm.*/arm/')}%_target_base_arch
93
ac67d8e1
ER
94# Compression used for %__spec_install_post_compress_modules
95# Supported values:
96# - "gzip -9nf" (module-init-tools and kmod)
97# - "xz" (kmod)
ffbeb310 98# - "xz -9e" (kmod), however size difference with "xz" default options is very minimal
ac67d8e1
ER
99# @since 1.707
100%kmod_compress_cmd %{__gzip} -9nf
101
1c834f14 102#-----------------------------------------------------------------
ac67d8e1 103# Find and compress all kernel modules
1c834f14
JR
104#
105# Requires: find
ac67d8e1 106# Depends: kmod_compress_cmd
1c834f14
JR
107#
108#%no_install_post_compress_modules 1
109%__spec_install_post_compress_modules { \
110%{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \
111%{!?debug:set +x;} \
112 if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \
ac67d8e1 113 tool=$(%{kmod_compress_cmd} --version | head -n1); \
0109ecc6 114 case "$tool" in gzip*) ext=gz;; xz*) ext=xz;; esac; \
1c834f14
JR
115 q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \
116 if [ "$q" ]; then \
117 printf "Compress %d kernel modules..." $(echo "$q" | wc -l); \
ac67d8e1 118 echo "$q" | xargs -r %{kmod_compress_cmd}; \
1c834f14
JR
119 echo "DONE"; \
120 find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \
ac67d8e1 121 while read a b; do ln -sf $b.$ext $a.$ext; rm -f $a; done; \
1c834f14
JR
122 fi; \
123 fi; \
124}; __spec_install_post_compress_modules } }
125
126# Build modules for kernels 2.6
127# Author: Przemyslaw Iskra <sparky@pld-linux.org>
128#
129# Usage:
130# %build_kernel_modules -m <modules> -C <directory>
131#
132# remember that proper Makefile is still required
133# Options:
134# -m <modules> (required) -- comma-separated list of modules to save,
135# without .ko extension, may be placed in subdirectory
136# -C <directory> -- change to <directory> before doing anything
137# -p <arg>, -P <arg> -- arguments passeed to make scripts
138# -c -- do not execute make clean
139# <additional arguments> -- all additional arguments will be passed to
140# make modules
141#
142# Additional patching supported via here document. Try:
143# %build_kernel_modules -m module <<'EOF'
144# your patch script here
145# EOF
146# Don't use it unless patching depends on config options.
147
148# Developer note: don't touch it unless you know how to handle '\'.
149# - \ in script expands to nothing
150# - \\\ in script expands to \
151# - \\\ inside definition expands to nothing
152# - \\\\\\\ inside definition expands to \
153# - in last line \ has to touch arguments so arguments passing
154# in new lines (using \) will be supported
155
156%build_kernel_modules(p:P:m:C:c) \
157%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \
158 \
159%define Opts \\\\\\\
160%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\
161 %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
162 CC="%{__cc}" ARCH=%{_target_base_arch} \\\
163 %else \\\
164 ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
165 %endif \\\
166%else \\\
a7086662
JP
167 %ifarch aarch64 \\\
168 ARCH=arm64 \\\
169 %endif \\\
170 %ifarch ppc ppc64 \\\
171 ARCH=powerpc \\\
172 %endif \\\
173 %ifnarch aarch64 ppc ppc64 \\\
174 ARCH=%{_target_base_arch} \\\
175 %endif \\\
1c834f14
JR
176 CC="%{__cc}" \\\
177%endif \
178%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
8389937f 179 %{?with_verbose:V=1} %{Opts} \
1c834f14
JR
180 \
181%{?-C:cd %{-C*}} \
182compile() { \
183 local L="<" PATCH_SH; \
184 [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \
185 set -e -x \
186 \
187 [ -r "%{_kernelsrcdir}/.config" ] || exit 1 \
188 rm -rf o \
189 install -d o/include/linux o/include/generated o/arch/x86/include o/arch/powerpc/lib \
190 ln -sf %{_kernelsrcdir}/.config o/.config \
191 ln -sf %{_kernelsrcdir}/Module.symvers o/Module.symvers \
192 if [ -f %{_kernelsrcdir}/include/generated/autoconf.h ]; then \
193 ln -sf %{_kernelsrcdir}/include/generated/autoconf.h o/include/generated/autoconf.h \
194 ln -s ../generated/autoconf.h o/include/linux/autoconf.h \
195 else \
196 ln -sf %{_kernelsrcdir}/include/linux/autoconf.h o/include/linux/autoconf.h \
197 fi \
198 if [ -d %{_kernelsrcdir}/arch/x86/include/generated ]; then \
199 ln -s %{_kernelsrcdir}/arch/x86/include/generated o/arch/x86/include \
200 fi \
201 \
202 set +x \
203 [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \
204 set -x \
205 \
206 install -d o/include/config \
207 touch o/include/config/MARKER \
208 ln -sf %{_kernelsrcdir}/include/config/auto.conf o/include/config/auto.conf \
209 ln -sf %{_kernelsrcdir}/scripts o/scripts \
210 \
211 %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\
212 RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\
213 ${1+"$@"} \\\
214 M=$PWD %{MakeOpts}} \
215 \
216 %{__make} -C %{_kernelsrcdir} modules \\\
217 ${1+"$@"} \\\
218 M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \
219%{?-C:cd -} \
220} \
221compile %{*} \
222%{nil}
223
224%build_kernel_modules_compat(p:P:m:C:c) \
225%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \
226 \
227%define Opts \\\\\\\
228%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\
229 %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
230 CC="%{__cc}" ARCH=%{_target_base_arch} \\\
231 %else \\\
232 ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
233 %endif \\\
234%else \\\
235 CC="%{__cc}" \\\
236%endif \
237%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
8389937f 238 %{?with_verbose:V=1} %{Opts} \
1c834f14
JR
239 \
240%{?-C:cd %{-C*}} \
241compile() { \
242 local L="<" PATCH_SH; \
243 [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \
244 set -e -x \
245 local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \
246 \
247for cfg in ${cfgs:-dist}; do \
248 [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \
249 \
250 rm -rf o \
251 install -d o/include/linux o/include/generated o/arch/powerpc/lib \
252 ln -sf %{_kernelsrcdir}/config-$cfg o/.config \
253 ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers \
254 if [ -f %{_kernelsrcdir}/include/generated/autoconf-$cfg.h ]; then \
255 ln -sf %{_kernelsrcdir}/include/generated/autoconf-$cfg.h o/include/generated/autoconf.h \
256 ln -s ../generated/autoconf.h o/include/linux/autoconf.h \
257 else \
258 ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \
259 fi \
260 \
261 set +x \
262 [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \
263 set -x \
264 \
265 %if %{with dist_kernel} || %(test -f %{_kernelsrcdir}/scripts/bin2c ; echo $?) \
266 %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\
267 %{-p*} %{-P*} \\\
268 %{MakeOpts} \
269 %else \
270 install -d o/include/config \
271 touch o/include/config/MARKER \
272 ln -sf %{_kernelsrcdir}/include/config/auto-$cfg.conf o/include/config/auto.conf \
273 ln -sf %{_kernelsrcdir}/scripts o/scripts \
274 %endif \
275 \
276 %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\
277 RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\
278 ${1+"$@"} \\\
279 M=$PWD %{MakeOpts}} \
280 \
281 %{__make} -C %{_kernelsrcdir} modules \\\
282 ${1+"$@"} \\\
283 M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \
284 \
285 for MODULE in {%{-m*},}; do \
286 [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \
287 done \
288done \
289%{?-C:cd -} \
290} \
291compile %{*} \
292%{nil}
293
294
295# Install kernel modules built by %build_kernel_modules
296# Author: Przemyslaw Iskra <sparky@pld-linux.org>
297#
298# Usage:
299# %install_kernel_modules -m <modules> -d <directory>
300#
301# Options:
302# -m <modules> (required) -- comma-separated list of modules to install,
303# without .ko extension, may be placed in subdirectory
304# -d <directory> (required) -- in what subdirectory modules should be
305# installed (eg. misc, kernel/drivers/net)
306# -s <suffix> -- suffix to use when installing modules, useful when module
307# with same name exists in kernel already
308# -n <file> -- name of modprobe config file to use (without .conf extension)
309# for defining aliases, only useful with -s
310# -D <directory> -- DESTDIR, base directory for installed files,
311# defaults to RPM_BUILD_ROOT
312
313%install_kernel_modules(m:d:s:n:D:) \
314%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \
315%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \
316%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \
317 \
318INSTALLROOT=%{-D*} \
319[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \
320 \
321%{!?debug:set +x;} \
322 \
323for MODULE in {%{-m*},}; do \
324 [ -n "${MODULE}" ] || continue \
325 MNAME=${MODULE##*/} \
326 install -m 644 -D ${MODULE}.ko $INSTALLROOT/lib/modules/%{_kernel_ver}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
327 %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \
328 echo "alias ${MNAME} ${MNAME}-%{-s*}" >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}/%{-n*}.conf} \
329done \
330unset INSTALLROOT \
331%{nil}
332
333%install_kernel_modules_compat(m:d:s:n:D:) \
334%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \
335%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \
336%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \
337 \
338INSTALLROOT=%{-D*} \
339[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \
340 \
341%{!?debug:set +x;} \
342local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \
343 \
344for MODULE in {%{-m*},}; do \
345 [ -n "${MODULE}" ] || continue \
346 for cfg in ${cfgs:-dist}; do \
347 [ "$cfg" = smp ] && suf=smp || suf= \
348 MNAME=${MODULE##*/} \
349 install -m 644 -D ${MODULE}-$cfg.ko \\\
350 $INSTALLROOT/lib/modules/%{_kernel_ver}$suf/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
351 %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}$suf \
352 echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
353 >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} $suf/%{-n*}.conf} \
354 done \
355done \
356unset INSTALLROOT \
357%{nil}
This page took 0.078262 seconds and 4 git commands to generate.