2017-10-23 09:39:36 +02:00
RELEASE = 5.1
2017-03-15 14:43:11 +01:00
2018-06-08 14:39:23 +02:00
# also bump pve-kernel-meta if either of MAJ.MIN, PATCHLEVEL or KREL change
2018-05-28 11:04:46 +02:00
KERNEL_MAJ = 4
KERNEL_MIN = 15
2018-07-04 15:44:15 +02:00
KERNEL_PATCHLEVEL = 18
2018-08-10 13:24:30 +02:00
# increment KREL if the ABI changes (abicheck target in debian/rules)
# rebuild packages with new KREL and run 'make abiupdate'
2018-10-04 11:38:16 +02:00
KREL = 7
2017-03-15 14:43:11 +01:00
2018-10-10 10:51:40 +02:00
PKGREL = 27
2018-03-05 15:42:44 +01:00
2018-05-28 11:04:46 +02:00
KERNEL_MAJMIN = $( KERNEL_MAJ) .$( KERNEL_MIN)
KERNEL_VER = $( KERNEL_MAJMIN) .$( KERNEL_PATCHLEVEL)
2018-03-09 11:25:58 +01:00
EXTRAVERSION = -${ KREL } -pve
2017-03-15 14:43:11 +01:00
KVNAME = ${ KERNEL_VER } ${ EXTRAVERSION }
PACKAGE = pve-kernel-${ KVNAME }
HDRPACKAGE = pve-headers-${ KVNAME }
2017-05-10 16:33:45 +02:00
ARCH = $( shell dpkg-architecture -qDEB_BUILD_ARCH)
2017-05-10 16:33:47 +02:00
# amd64/x86_64/x86 share the arch subdirectory in the kernel, 'x86' so we need
# a mapping
KERNEL_ARCH = x86
i f n e q ( $ { A R C H } , a m d 6 4 )
KERNEL_ARCH = ${ ARCH }
e n d i f
2017-06-20 09:51:41 +02:00
GITVERSION := $( shell git rev-parse HEAD)
2017-03-15 14:43:11 +01:00
2017-03-24 12:48:43 +01:00
SKIPABI = 0
2018-02-14 12:21:05 +01:00
i f e q ( $( CC ) , c c )
GCC = gcc
e l s e
GCC = $( CC)
e n d i f
2018-03-09 11:25:58 +01:00
BUILD_DIR = build
2017-03-15 14:43:11 +01:00
2018-03-09 14:22:07 +01:00
KERNEL_SRC = ubuntu-bionic
2018-05-28 11:04:46 +02:00
KERNEL_SRC_SUBMODULE = submodules/$( KERNEL_SRC)
2017-03-15 14:43:11 +01:00
KERNEL_CFG_ORG = config-${ KERNEL_VER } .org
2018-06-04 15:02:56 +02:00
E1000EDIR = e1000e-3.4.1.1
2017-07-28 13:09:25 +02:00
E1000ESRC = ${ E1000EDIR } .tar.gz
2018-06-04 15:02:56 +02:00
IGBDIR = igb-5.3.5.18
2017-07-28 13:09:25 +02:00
IGBSRC = ${ IGBDIR } .tar.gz
2017-10-12 14:56:28 +02:00
ZFSONLINUX_SUBMODULE = submodules/zfsonlinux
2018-03-09 11:25:58 +01:00
SPLDIR = pkg-spl
2017-10-12 14:56:28 +02:00
SPLSRC = ${ ZFSONLINUX_SUBMODULE } /spl-debian
2018-03-09 11:25:58 +01:00
ZFSDIR = pkg-zfs
2017-10-12 14:56:28 +02:00
ZFSSRC = ${ ZFSONLINUX_SUBMODULE } /zfs-debian
2018-02-28 09:31:06 +01:00
2018-03-09 11:25:58 +01:00
MODULES = modules
2018-07-04 15:42:12 +02:00
MODULE_DIRS = ${ E1000EDIR } ${ IGBDIR } ${ SPLDIR } ${ ZFSDIR }
2017-03-15 14:43:11 +01:00
2018-03-09 11:25:58 +01:00
# exported to debian/rules via debian/rules.d/dirs.mk
2018-07-04 15:42:12 +02:00
DIRS = KERNEL_SRC E1000EDIR IGBDIR SPLDIR ZFSDIR MODULES
2018-03-09 11:25:58 +01:00
2017-03-15 14:43:11 +01:00
DST_DEB = ${ PACKAGE } _${ KERNEL_VER } -${ PKGREL } _${ ARCH } .deb
HDR_DEB = ${ HDRPACKAGE } _${ KERNEL_VER } -${ PKGREL } _${ ARCH } .deb
2018-05-28 11:04:46 +02:00
LINUX_TOOLS_DEB = linux-tools-$( KERNEL_MAJMIN) _${ KERNEL_VER } -${ PKGREL } _${ ARCH } .deb
2017-03-15 14:43:11 +01:00
2018-02-28 09:31:06 +01:00
DEBS = ${ DST_DEB } ${ HDR_DEB } ${ LINUX_TOOLS_DEB }
2017-03-15 14:43:11 +01:00
2017-08-02 14:45:53 +02:00
all : check_gcc deb
deb : ${DEBS }
2017-03-15 14:43:11 +01:00
2018-02-14 12:21:05 +01:00
check_gcc :
$( GCC) --version| grep "6\.3" || false
@$( GCC) -Werror -mindirect-branch= thunk-extern -mindirect-branch-register -c -x c /dev/null -o check_gcc.o \
|| ( rm -f check_gcc.o; \
echo "Please install gcc-6 packages with indirect thunk / RETPOLINE support" ; \
false )
@rm -f check_gcc.o
2017-03-15 14:43:11 +01:00
2018-02-28 09:31:06 +01:00
${LINUX_TOOLS_DEB} ${HDR_DEB} : ${DST_DEB }
${DST_DEB} : ${BUILD_DIR }.prepared
cd ${ BUILD_DIR } ; dpkg-buildpackage --jobs= auto -b -uc -us
2017-03-15 14:43:11 +01:00
lintian ${ DST_DEB }
2018-02-28 09:31:06 +01:00
#lintian ${HDR_DEB}
2017-03-15 14:43:11 +01:00
lintian ${ LINUX_TOOLS_DEB }
2018-03-09 11:25:58 +01:00
${BUILD_DIR}.prepared : $( addsuffix .prepared ,$ {KERNEL_SRC } $ {MODULES } debian )
2018-02-28 09:31:06 +01:00
cp -a fwlist-previous ${ BUILD_DIR } /
2018-03-21 11:27:29 +01:00
cp -a abi-prev-* ${ BUILD_DIR } /
2018-02-28 09:31:06 +01:00
cp -a abi-blacklist ${ BUILD_DIR } /
2018-03-09 11:25:58 +01:00
touch $@
debian.prepared : debian
rm -rf ${ BUILD_DIR } /debian
mkdir -p ${ BUILD_DIR }
cp -a debian ${ BUILD_DIR } /debian
2018-02-28 09:31:06 +01:00
echo " git clone git://git.proxmox.com/git/pve-kernel.git\\ngit checkout ${ GITVERSION } " > ${ BUILD_DIR } /debian/SOURCE
2018-03-09 11:25:58 +01:00
@$( foreach dir, ${ DIRS } ,echo " ${ dir } = ${ ${ dir } } " >> ${ BUILD_DIR } /debian/rules.d/env.mk; )
echo " KVNAME= ${ KVNAME } " >> ${ BUILD_DIR } /debian/rules.d/env.mk
2018-05-28 11:04:46 +02:00
echo " KERNEL_MAJMIN= ${ KERNEL_MAJMIN } " >> ${ BUILD_DIR } /debian/rules.d/env.mk
2018-03-09 11:25:58 +01:00
cd ${ BUILD_DIR } ; debian/rules debian/control
2017-03-15 14:43:11 +01:00
touch $@
2018-02-28 09:31:06 +01:00
${KERNEL_SRC}.prepared : ${KERNEL_SRC_SUBMODULE } | submodule
rm -rf ${ BUILD_DIR } /${ KERNEL_SRC } $@
mkdir -p ${ BUILD_DIR }
2018-03-09 11:27:15 +01:00
cp -a ${ KERNEL_SRC_SUBMODULE } ${ BUILD_DIR } /${ KERNEL_SRC }
2018-02-28 09:31:06 +01:00
# TODO: split for archs, track and diff in our repository?
cat ${ BUILD_DIR } /${ KERNEL_SRC } /debian.master/config/config.common.ubuntu ${ BUILD_DIR } /${ KERNEL_SRC } /debian.master/config/${ ARCH } /config.common.${ ARCH } ${ BUILD_DIR } /${ KERNEL_SRC } /debian.master/config/${ ARCH } /config.flavour.generic > ${ KERNEL_CFG_ORG }
cp ${ KERNEL_CFG_ORG } ${ BUILD_DIR } /${ KERNEL_SRC } /.config
sed -i ${ BUILD_DIR } /${ KERNEL_SRC } /Makefile -e 's/^EXTRAVERSION.*$$/EXTRAVERSION=${EXTRAVERSION}/'
rm -rf ${ BUILD_DIR } /${ KERNEL_SRC } /debian ${ BUILD_DIR } /${ KERNEL_SRC } /debian.master
2018-06-27 17:47:31 +02:00
cd ${ BUILD_DIR } /${ KERNEL_SRC } ; for patch in ../../patches/kernel/*.patch; do echo " applying patch ' $$ patch' " && patch -p1 < $$ { patch} ; done
2017-03-15 14:43:11 +01:00
touch $@
2018-02-28 09:31:06 +01:00
${MODULES}.prepared : $( addsuffix .prepared ,$ {MODULE_DIRS })
touch $@
${E1000EDIR}.prepared : ${E 1000ESRC }
rm -rf ${ BUILD_DIR } /${ MODULES } /${ E1000EDIR } $@
mkdir -p ${ BUILD_DIR } /${ MODULES } /${ E1000EDIR }
tar --strip-components= 1 -C ${ BUILD_DIR } /${ MODULES } /${ E1000EDIR } -xf ${ E1000ESRC }
cd ${ BUILD_DIR } /${ MODULES } /${ E1000EDIR } ; patch -p1 < ../../../patches/intel/intel-module-gcc6-compat.patch
cd ${ BUILD_DIR } /${ MODULES } /${ E1000EDIR } ; patch -p1 < ../../../patches/intel/e1000e/e1000e_4.10_max-mtu.patch
2018-06-04 15:03:26 +02:00
cd ${ BUILD_DIR } /${ MODULES } /${ E1000EDIR } ; patch -p1 < ../../../patches/intel/e1000e/e1000e_4.15-new-timer.patch
2018-02-28 09:31:06 +01:00
touch $@
${IGBDIR}.prepared : ${IGBSRC }
rm -rf ${ BUILD_DIR } /${ MODULES } /${ IGBDIR } $@
mkdir -p ${ BUILD_DIR } /${ MODULES } /${ IGBDIR }
tar --strip-components= 1 -C ${ BUILD_DIR } /${ MODULES } /${ IGBDIR } -xf ${ IGBSRC }
2018-06-18 17:06:45 +02:00
cd ${ BUILD_DIR } /${ MODULES } /${ IGBDIR } ; patch -p1 < ../../../patches/intel/igb/igb_4.15_mtu.patch
2018-02-28 09:31:06 +01:00
touch $@
$(SPLDIR).prepared : ${SPLSRC }
rm -rf ${ BUILD_DIR } /${ MODULES } /${ SPLDIR } $@
mkdir -p ${ BUILD_DIR } /${ MODULES } /${ SPLDIR }
cp -a ${ SPLSRC } /* ${ BUILD_DIR } /${ MODULES } /${ SPLDIR }
cd ${ BUILD_DIR } /${ MODULES } /${ SPLDIR } ; for patch in ../../../${ SPLSRC } /../spl-patches/*.patch; do patch -p1 < $$ { patch} ; done
touch $@
$(ZFSDIR).prepared : ${ZFSSRC }
rm -rf ${ BUILD_DIR } /${ MODULES } /${ ZFSDIR } $@
mkdir -p ${ BUILD_DIR } /${ MODULES } /${ ZFSDIR }
cp -a ${ ZFSSRC } /* ${ BUILD_DIR } /${ MODULES } /${ ZFSDIR }
cd ${ BUILD_DIR } /${ MODULES } /${ ZFSDIR } ; for patch in ../../../${ ZFSSRC } /../zfs-patches/*.patch; do patch -p1 < $$ { patch} ; done
touch $@
2017-03-15 14:43:11 +01:00
.PHONY : upload
upload : ${DEBS }
2018-08-13 08:29:09 +02:00
tar cf - ${ DEBS } | ssh -X repoman@repo.proxmox.com -- upload --product pve,pmg --dist stretch --arch ${ ARCH }
2017-03-15 14:43:11 +01:00
.PHONY : distclean
distclean : clean
2018-02-28 09:31:06 +01:00
git submodule deinit --all
2017-03-15 14:43:11 +01:00
2017-03-15 15:21:54 +01:00
# upgrade to current master
.PHONY : update_modules
2017-10-13 08:30:09 +02:00
update_modules : submodule
2017-03-15 15:21:54 +01:00
git submodule foreach 'git pull --ff-only origin master'
2017-10-12 14:56:28 +02:00
cd ${ ZFSSRC } ; git pull --ff-only origin master
cd ${ SPLSRC } ; git pull --ff-only origin master
2017-03-15 15:21:54 +01:00
# make sure submodules were initialized
2017-10-13 08:30:09 +02:00
.PHONY : submodule
submodule :
2017-10-12 14:56:28 +02:00
test -f " ${ KERNEL_SRC_SUBMODULE } /README " || git submodule update --init ${ KERNEL_SRC_SUBMODULE }
test -f " ${ ZFSONLINUX_SUBMODULE } /Makefile " || git submodule update --init ${ ZFSONLINUX_SUBMODULE }
( test -f " ${ ZFSSRC } /debian/changelog " && test -f " ${ SPLZRC } /debian/changelog " ) || ( cd ${ ZFSONLINUX_SUBMODULE } ; git submodule update --init)
2017-03-15 15:21:54 +01:00
2018-03-21 11:27:33 +01:00
# call after ABI bump with header deb in working directory
.PHONY : abiupdate
abiupdate : abi -prev -${KVNAME }
abi-prev-${KVNAME} : abi -tmp -${KVNAME }
i f n e q ( $( strip $ ( shell git status --untracked -files =no --porcelain -z ) ) , )
@echo "working directory unclean, aborting!"
@false
e l s e
git rm "abi-prev-*"
mv $< $@
git add $@
git commit -s -m " update ABI file for ${ KVNAME } " -m "(generated with debian/scripts/abi-generate)"
@echo " update abi-prev- ${ KVNAME } committed! "
e n d i f
abi-tmp-${KVNAME} :
@ test -e ${ HDR_DEB } || ( echo " need ${ HDR_DEB } to extract ABI data! " && false )
debian/scripts/abi-generate ${ HDR_DEB } $@ ${ KVNAME } 1
2017-03-15 15:21:54 +01:00
2017-03-15 14:43:11 +01:00
.PHONY : clean
clean :
2018-02-28 09:31:06 +01:00
rm -rf *~ build *.prepared ${ KERNEL_CFG_ORG }
2018-05-23 11:42:10 +02:00
rm -f *.deb *.changes *.buildinfo