Whamcloud - gitweb
5156a2e3845504b89a4e3b73a3fc30bc23c77f77
[fs/lustre-release.git] / build / lbuild-oel5
1 # vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
2
3 # increment this if you have made a change that should force a new kernel
4 # to build built
5 #BUILD_GEN=1
6 #BUILD_GEN=2    # bz19952: remove -lustre tag from kernel RPM names
7 BUILD_GEN=3     # bz19975 enable the building of src.rpms by default
8
9 DEVEL_KERNEL_TYPE="devel"
10
11 prepare_and_build_srpm() {
12
13     pushd $TOPDIR >/dev/null
14     local GCC_VER=""
15     read GCC_VER < <($CC --version)
16     GCC_VER=${GCC_VER##* }
17     if [[ $GCC_VER = 4.3* ]]; then
18         # add the gcc 4.3 kernel build fix patch to it
19         cat <<"EOF" >> $TOPDIR/SOURCES/linux-${lnxmaj}-lustre.patch
20 diff -urp linux-2.6.18.rawops/Makefile linux-2.6.18.races/Makefile
21 --- linux-2.6.18.rawops/Makefile        2007-02-08 19:00:31.000000000 +0200
22 +++ linux-2.6.18.rawops/Makefile        2007-02-14 19:23:49.000000000 +0200
23 @@ -506,6 +506,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
24  # disable pointer signed / unsigned warnings in gcc 4.0
25  CFLAGS += $(call cc-option,-Wno-pointer-sign,)
26
27 +# workaround to avoid gcc 4.3 emitting libgcc calls (see gcc bug #32044)
28 +CFLAGS += $(call cc-option,-fno-tree-scev-cprop,)
29 +
30  # Default kernel image to build when no specific target is given.
31  # KBUILD_IMAGE may be overruled on the command line or
32  # set in the environment
33 EOF
34     fi
35
36     # create the buildid
37     local buildid="_lustre${EXTRA_VERSION##*_lustre}"
38
39     # edit the SPEC with our changes
40     sed -i -e 's/^\(%define signmodules \).*/\10/' \
41            -e "s/^#% \(define buildid\).*/%\1 ${buildid}/" \
42            -e '/-e $RPM_SOURCE_DIR\/kabi_whitelist_/i\
43     rm -f $RPM_SOURCE_DIR/kabi_whitelist_%{_target_cpu}$Flavour' \
44            -e '/_sourcedir\/kabitool -b \./a\
45     cp $RPM_BUILD_ROOT/kabi_whitelist $RPM_SOURCE_DIR/kabi_whitelist_%{_target_cpu}$Flavour' \
46            -e '/^# empty final patch file to facilitate testing of kernel patches/i\
47 # adds Lustre patches\
48 Patch99995: linux-%{kversion}-lustre.patch' \
49            -e '/^# conditionally applied test patch for debugging convenience/i\
50 # lustre patch\
51 %patch99995 -p1\
52 ' \
53            -e '/^%prep$/,/^# END OF PATCH APPLICATIONS$/s/kernel-%{kversion}/%{name}-%{kversion}/g' \
54            -e '/find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\
55     cp -a fs/ext3/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext3 \
56     cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4' \
57           SPECS/kernel-2.6.spec
58
59     if $KERNEL_LUSTRE_NAMING; then
60         # these are all of the changes needed because we change the package names
61         # to kernel-lustre-*.  these should all go away when we stop this insanity
62         sed -i -e 's/^\(Name:.*kernel\)/\1-lustre/' \
63                -e '/^Provides: glibc-kernheaders = /a\
64 Provides: kernel-headers = %{rpmversion}-%{release}
65 Obsoletes: kernel-headers
66 ' \
67                -e '/^Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}$/a\
68 Provides: kernel = %{rpmversion}-%{release}
69 ' \
70                -e '/^Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}$/a\
71 Provides: kernel-devel = %{rpmversion}-%{release}
72 Obsoletes: kernel-devel
73 ' \
74                -e '/^Provides: %{name}-debuginfo-common-%{_target_cpu} = %{KVERREL}$/a\
75 Provides: kernel-debuginfo-common = %{KVERREL}
76 Obsoletes: kernel-debuginfo-common
77 ' \
78                -e '/^Provides: %{name}-debuginfo-%{_target_cpu} = %{KVERREL}$/a\
79 Provides: kernel-debuginfo = %{KVERREL}
80 Obsoletes: kernel-debuginfo
81 ' \
82               SPECS/kernel-2.6.spec
83     fi
84
85     # XXX - a building-on-Ubuntu hack
86     if grep -q "Ubuntu" /etc/issue; then
87         sed  -i -e 's/^\(BuildPreReq: .*\)$/#NOU \1/g' \
88                -e 's/^\(BuildRequires: .*\)$/#NOU \1/g' \
89           SPECS/kernel-2.6.spec
90     fi
91
92     # finally, work around RH bug 491775, if needed
93     if ! grep -q "cp -a asm-x86_64 \$RPM_BUILD_ROOT/lib/modules/\$KernelVer/build/include" \
94               SPECS/kernel-2.6.spec; then
95         # XXX - i wonder if we will need to do this ad-hoc patching enough to
96         #       formalize a patching system.  let's assume not for the time
97         #       being.
98         patch -s -p0 <<"EOF" || fatal 1 "Error while patching SPECS/kernel-2.6.spec"
99 --- SPECS/kernel-2.6.spec.dist  2009-03-23 20:30:55.000000000 -0400
100 +++ SPECS/kernel-2.6.spec       2009-03-23 20:37:03.000000000 -0400
101 @@ -6961,6 +6961,10 @@
102      cd include
103      cp -a acpi config keys linux math-emu media mtd net pcmcia rdma rxrpc scsi sound video asm asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
104      cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
105 +    if [ "$Arch" = "i386" ]; then
106 +      mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/asm-x86_64
107 +      cp -a asm-x86_64/{stacktrace,k8,pci-direct}.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/asm-x86_64
108 +    fi
109      if [ "$Arch" = "x86_64" ]; then
110        cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
111      fi
112 EOF
113     fi
114
115     popd >/dev/null
116
117     # this concept of being able to build a list of targets with a single
118     # lbuild is a fine idea, but in reality I think it's (very) broken.  I
119     # don't even think the lustre.spec can handle being called with "--target
120     # <multiple arches>".  It certainly can't handle the issue where each
121     # arch has it's own kernel location.
122     # but we will do the best we can and put the plumbing in place so that
123     # this could work when the other broken bits are fixed.
124     # in reality, our current use of lbuild only ever has a single arch in
125     # $BUILD_ARCHS
126     local arch
127     local targets=""
128     for arch in $BUILD_ARCHS; do
129         # XXX - ok.  so here's a hack that needs to be fixed properly
130         #       ppc64 was merged to ppc some time ago pre 2.6.18
131         if [ $arch = ppc64 ]; then
132             arch=ppc
133         fi
134         targets="--target $arch $targets"
135         # copy our .config into the RPM build tree
136         (echo "# $(basearch $arch)"; cat $CONFIG_FILE) > \
137             SOURCES/kernel-2.6.18-$arch.config
138
139         # XXX - hackity hack -- until we get (or generate from the base
140         #                       config) configs for xen and debug
141         local f=""
142         for f in SOURCES/kernel-${lnxmaj}-*.config; do
143             grep -q "^CONFIG_SD_IOSTATS=y" $f || \
144                 echo "CONFIG_SD_IOSTATS=y" >> $f
145         done
146     done
147
148     # do we need any special rpm build options
149     local rpmbuildopt="-bb"
150     if $DO_SRC; then
151         rpmbuildopt="-ba"
152     fi
153     # stupid Ubuntu's rpm doesn't do debuginfo properly
154     if [ ! -f /usr/lib/rpm/debugedit ]; then
155         rpmbuildopt="$rpmbuildopt --without debuginfo"
156     fi
157
158     # XXX - need to figure this kabichk crap out -- it fails the build
159     rpmbuildopt="$rpmbuildopt --without kabichk"
160
161     # now build it
162     if ! $RPMBUILD $rpmbuildopt $targets --with baseonly \
163                    --define "_topdir $TOPDIR" \
164                    $TOPDIR/SPECS/kernel-2.6.spec >&2; then
165         fatal 1 "Failed to build kernel RPM"
166     fi
167
168 }
169
170 devel_kernel_name() {
171     local lustre=${1:-false}
172
173     if $lustre; then
174         echo "kernel-lustre-$DEVEL_KERNEL_TYPE"
175     else
176         echo "kernel-$DEVEL_KERNEL_TYPE"
177     fi
178
179 }
180
181 rpm_BUILD_kernel_dirname() {
182     local rpmsmptype="$1"
183     local lnxmaj="$2"
184     local lnxmin="$3"
185     local arch="$4"
186
187     local lustre=""
188     if $KERNEL_LUSTRE_NAMING; then
189         $lustre="-lustre"
190     fi
191     echo kernel${lustre}${lnxmaj}${lnxmin}/linux-${lnxmaj}.$arch
192 }