# vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4: # increment this if you have made a change that should force a new kernel # to build built #BUILD_GEN=1 #BUILD_GEN=2 # bz19952: remove -lustre tag from kernel RPM names BUILD_GEN=3 # bz19975 enable the building of src.rpms by default DEVEL_KERNEL_TYPE="devel" prepare_and_build_srpm() { pushd $TOPDIR >/dev/null local GCC_VER="" read GCC_VER < <($CC --version) GCC_VER=${GCC_VER##* } if [[ $GCC_VER = 4.3* ]]; then # add the gcc 4.3 kernel build fix patch to it cat <<"EOF" >> $TOPDIR/SOURCES/linux-${lnxmaj}-lustre.patch diff -urp linux-2.6.18.rawops/Makefile linux-2.6.18.races/Makefile --- linux-2.6.18.rawops/Makefile 2007-02-08 19:00:31.000000000 +0200 +++ linux-2.6.18.rawops/Makefile 2007-02-14 19:23:49.000000000 +0200 @@ -506,6 +506,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) # disable pointer signed / unsigned warnings in gcc 4.0 CFLAGS += $(call cc-option,-Wno-pointer-sign,) +# workaround to avoid gcc 4.3 emitting libgcc calls (see gcc bug #32044) +CFLAGS += $(call cc-option,-fno-tree-scev-cprop,) + # Default kernel image to build when no specific target is given. # KBUILD_IMAGE may be overruled on the command line or # set in the environment EOF fi # create the buildid local buildid="_lustre${EXTRA_VERSION##*_lustre}" # edit the SPEC with our changes sed -i -e 's/^\(%define signmodules \).*/\10/' \ -e "s/^#% \(define buildid\).*/%\1 ${buildid}/" \ -e '/-e $RPM_SOURCE_DIR\/kabi_whitelist_/i\ rm -f $RPM_SOURCE_DIR/kabi_whitelist_%{_target_cpu}$Flavour' \ -e '/_sourcedir\/kabitool -b \./a\ cp $RPM_BUILD_ROOT/kabi_whitelist $RPM_SOURCE_DIR/kabi_whitelist_%{_target_cpu}$Flavour' \ -e '/^# empty final patch file to facilitate testing of kernel patches/i\ # adds Lustre patches\ Patch99995: linux-%{kversion}-lustre.patch' \ -e '/^# conditionally applied test patch for debugging convenience/i\ # lustre patch\ %patch99995 -p1\ ' \ -e '/^%prep$/,/^# END OF PATCH APPLICATIONS$/s/kernel-%{kversion}/%{name}-%{kversion}/g' \ -e '/find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\ cp -a fs/ext3/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext3 \ cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4' \ SPECS/kernel-2.6.spec 2>&1 || \ fatal 1 "Error while editing SPECS/kernel-2.6.spec" if $KERNEL_LUSTRE_NAMING; then # these are all of the changes needed because we change the package names # to kernel-lustre-*. these should all go away when we stop this insanity sed -i -e 's/^\(Name:.*kernel\)/\1-lustre/' \ -e '/^Provides: glibc-kernheaders = /a\ Provides: kernel-headers = %{rpmversion}-%{release} Obsoletes: kernel-headers ' \ -e '/^Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}$/a\ Provides: kernel = %{rpmversion}-%{release} ' \ -e '/^Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}$/a\ Provides: kernel-devel = %{rpmversion}-%{release} Obsoletes: kernel-devel ' \ -e '/^Provides: %{name}-debuginfo-common-%{_target_cpu} = %{KVERREL}$/a\ Provides: kernel-debuginfo-common = %{KVERREL} Obsoletes: kernel-debuginfo-common ' \ -e '/^Provides: %{name}-debuginfo-%{_target_cpu} = %{KVERREL}$/a\ Provides: kernel-debuginfo = %{KVERREL} Obsoletes: kernel-debuginfo ' \ SPECS/kernel-2.6.sp 2>&1 || \ fatal 1 "Error while editing SPECS/kernel-2.6.spec"ec fi # XXX - a building-on-Ubuntu hack if grep -q "Ubuntu" /etc/issue; then sed -i -e 's/^\(BuildPreReq: .*\)$/#NOU \1/g' \ -e 's/^\(BuildRequires: .*\)$/#NOU \1/g' \ -e 's/sha512hmac/md5sum/g' \ SPECS/kernel-2.6.spec 2>&1 || \ fatal 1 "Error while editing SPECS/kernel-2.6.spec" fi # finally, work around RH bug 491775, if needed if ! grep -q "cp -a asm-x86_64 \$RPM_BUILD_ROOT/lib/modules/\$KernelVer/build/include" \ SPECS/kernel-2.6.spec; then # XXX - i wonder if we will need to do this ad-hoc patching enough to # formalize a patching system. let's assume not for the time # being. patch -s -p0 <<"EOF" 2>&1 || \ fatal 1 "Error while patching SPECS/kernel-2.6.spec" --- SPECS/kernel-2.6.spec.dist 2009-03-23 20:30:55.000000000 -0400 +++ SPECS/kernel-2.6.spec 2009-03-23 20:37:03.000000000 -0400 @@ -6961,6 +6961,10 @@ cd include 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 cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include + if [ "$Arch" = "i386" ]; then + mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/asm-x86_64 + cp -a asm-x86_64/{stacktrace,k8,pci-direct}.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/asm-x86_64 + fi if [ "$Arch" = "x86_64" ]; then cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include fi EOF fi popd >/dev/null # this concept of being able to build a list of targets with a single # lbuild is a fine idea, but in reality I think it's (very) broken. I # don't even think the lustre.spec can handle being called with "--target # ". It certainly can't handle the issue where each # arch has it's own kernel location. # but we will do the best we can and put the plumbing in place so that # this could work when the other broken bits are fixed. # in reality, our current use of lbuild only ever has a single arch in # $BUILD_ARCHS local arch local targets="" for arch in $BUILD_ARCHS; do # XXX - ok. so here's a hack that needs to be fixed properly # ppc64 was merged to ppc some time ago pre 2.6.18 if [ $arch = ppc64 ]; then arch=ppc fi targets="--target $arch $targets" # copy our .config into the RPM build tree (echo "# $(basearch $arch)"; cat $CONFIG_FILE) > \ SOURCES/kernel-2.6.18-$arch.config # XXX - hackity hack -- until we get (or generate from the base # config) configs for xen and debug local f="" for f in SOURCES/kernel-${lnxmaj}-*.config; do grep -q "^CONFIG_SD_IOSTATS=y" $f || \ echo "CONFIG_SD_IOSTATS=y" >> $f done done # do we need any special rpm build options local rpmbuildopt="-bb" if $DO_SRC; then rpmbuildopt="-ba" fi # stupid Ubuntu's rpm doesn't do debuginfo properly if [ ! -f /usr/lib/rpm/debugedit ]; then rpmbuildopt="$rpmbuildopt --without debuginfo" fi # XXX - need to figure this kabichk crap out -- it fails the build rpmbuildopt="$rpmbuildopt --without kabichk" # now build it if ! $RPMBUILD $rpmbuildopt $targets --with baseonly \ --define "_topdir $TOPDIR" \ $TOPDIR/SPECS/kernel-2.6.spec 2>&1; then return 1 fi return 0 } devel_kernel_name() { local lustre=${1:-false} if $lustre; then echo "kernel-lustre-$DEVEL_KERNEL_TYPE" else echo "kernel-$DEVEL_KERNEL_TYPE" fi } rpm_BUILD_kernel_dirname() { local rpmsmptype="$1" local lnxmaj="$2" local lnxmin="$3" local arch="$4" local lustre="" if $KERNEL_LUSTRE_NAMING; then $lustre="-lustre" fi echo kernel${lustre}${lnxmaj}${lnxmin}/linux-${lnxmaj}.$arch } find_linux_devel_paths() { local path="$1" local ARCH=$TARGET_ARCH # If DEVEL_PATH_ARCH is set, use it. Added for fc11 as it needs i586 string for i686. if [ $DEVEL_PATH_ARCH ];then ARCH=$DEVEL_PATH_ARCH fi LINUX=$path/usr/src/kernels/${lnxmaj}${lnxmin}-${lnxrel}${DEVEL_PATH_ARCH_DELIMETER:-"-"}${ARCH} # RHEL doesn't have the -obj tree LINUXOBJ="" # XXX - i don't think we need this any more #LINUXRELEASE=$(find_linux_release "$LINUX") #if [ -z "$LINUXRELEASE" ]; then # echo "Failed to find linux release in $LINUX" # return 255 #fi return 0 }