aboutsummaryrefslogtreecommitdiff
path: root/srcpkgs/linux3.16/template
blob: ffc97ed97a4b5cf7162c0264641375cd1fa92b9c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# Template file for 'linux3.16'
#
pkgname=linux3.16
version=3.16.0
revision=1
wrksrc="linux-${version%.*}"
maintainer="John Galt <johngaltfirstrun@gmail.com>"
homepage="http://www.kernel.org"
license="GPL-2"
short_desc="The Linux kernel and modules (${version%.*} series)"
distfiles="http://www.kernel.org/pub/linux/kernel/v3.x/linux-${version%.*}.tar.xz"
checksum=4813ad7927a7d92e5339a873ab16201b242b2748934f12cb5df9ba2cfe1d77a0

_kernver="${version}_${revision}"

nostrip=yes
noverifyrdeps=yes
preserve=yes
only_for_archs="i686 x86_64"
makedepends="bc perl kmod>=11_2 libressl-openssl elfutils"
triggers="kernel-hooks"
# These files could be modified when an external module is built.
mutable_files="
	/usr/lib/modules/${_kernver}/modules.dep
	/usr/lib/modules/${_kernver}/modules.dep.bin
	/usr/lib/modules/${_kernver}/modules.symbols
	/usr/lib/modules/${_kernver}/modules.symbols.bin
	/usr/lib/modules/${_kernver}/modules.alias
	/usr/lib/modules/${_kernver}/modules.alias.bin
	/usr/lib/modules/${_kernver}/modules.devname"

do_configure() {
	# If there's a file called <arch>-dotconfig, use it to
	# configure the kernel; otherwise use arch defaults and all stuff
	# as modules (defconfig+allmodconfig).
	local arch

	if [ "$XBPS_TARGET_MACHINE" != "x86_64" ]; then
		arch=i386
	else
		arch=x86_64
	fi

	if [ -f ${FILESDIR}/${arch}-dotconfig-custom ]; then
		msg_normal "Detected a custom .config file for your arch, using it.\n"
		cp -f ${FILESDIR}/${arch}-dotconfig-custom .config
		make ${makejobs} oldconfig
	elif [ -f ${FILESDIR}/${arch}-dotconfig ]; then
		msg_normal "Detected a .config file for your arch, using it.\n"
		cp -f ${FILESDIR}/${arch}-dotconfig .config
		make ${makejobs} oldconfig
	else
		msg_normal "Defaulting to 'defconfig and allmodconfig'.\n"
		make ${makejobs} defconfig
		make ${makejobs} allmodconfig
	fi
	# Always use our revision to CONFIG_LOCALVERSION to match our pkg version.
	sed -i -e "s|^\(CONFIG_LOCALVERSION=\).*|\1\"_${revision}\"|" .config
}

do_build() {
    # Override EXTRAVERSION because we can't have dashes in kernel name
	make EXTRAVERSION=${_patchver} ${makejobs} prepare
	make EXTRAVERSION=${_patchver} ${makejobs} bzImage modules
}

do_install() {
	local arch hdrdest

	if [ "$XBPS_TARGET_MACHINE" != "x86_64" ]; then
		arch=i386
	else
		arch=x86_64
	fi

	# Run depmod after compressing modules.
	sed -i '2iexit 0' scripts/depmod.sh

	# Install kernel, firmware and modules
	make ${makejobs} INSTALL_MOD_PATH=${DESTDIR} modules_install

	hdrdest=${DESTDIR}/usr/src/kernel-headers-${_kernver}

	install -Dm644 .config ${DESTDIR}/boot/config-${_kernver}
	install -Dm644 arch/x86/boot/bzImage \
		${DESTDIR}/boot/vmlinuz-${_kernver}
	install -Dm644 System.map \
		${DESTDIR}/boot/System.map-${_kernver}

	# Switch to /usr.
	vmkdir usr
	mv ${DESTDIR}/lib ${DESTDIR}/usr

	cd ${DESTDIR}/usr/lib/modules/${_kernver}
	rm -f source build
	ln -sf ../../../src/kernel-headers-${_kernver} build

	cd ${wrksrc}
	# Install required headers to build external modules
	install -Dm644 Makefile ${hdrdest}/Makefile
	install -Dm644 kernel/Makefile ${hdrdest}/kernel/Makefile
	install -Dm644 .config ${hdrdest}/.config
	mkdir -p ${hdrdest}/include
	# Remove firmware stuff provided by the "linux-firmware" pkg.
	rm -rf ${DESTDIR}/usr/lib/firmware

	for i in acpi asm-generic config crypto drm generated linux math-emu \
		media net pcmcia scsi sound trace uapi video xen; do
		if [ -d include/$i ]; then
			cp -a include/$i ${hdrdest}/include
		fi
	done

	cd ${wrksrc}
	mkdir -p ${hdrdest}/arch/x86
	cp -a arch/x86/include ${hdrdest}/arch/x86

	# Copy files necessary for later builds, like nvidia and vmware
	cp Module.symvers ${hdrdest}
	cp -a scripts ${hdrdest}

	mkdir -p ${hdrdest}/arch/x86/kernel
	cp arch/x86/Makefile ${hdrdest}/arch/x86
	if [ "$arch" = "i386" ]; then
		cp arch/x86/Makefile_32.cpu ${hdrdest}/arch/x86
	fi
	cp arch/x86/kernel/asm-offsets.s ${hdrdest}/arch/x86/kernel

	# add headers for lirc package
	# pci
	for i in bt8xx cx88 saa7134; do
		mkdir -p ${hdrdest}/drivers/media/pci/${i}
		cp -a drivers/media/pci/${i}/*.h ${hdrdest}/drivers/media/pci/${i}
	done
	# usb
	for i in cpia2 em28xx pwc; do
		mkdir -p ${hdrdest}/drivers/media/usb/${i}
		cp -a drivers/media/usb/${i}/*.h ${hdrdest}/drivers/media/usb/${i}
	done
	# i2c
	mkdir -p ${hdrdest}/drivers/media/i2c
	cp drivers/media/i2c/*.h ${hdrdest}/drivers/media/i2c
	for i in cx25840; do
		mkdir -p ${hdrdest}/drivers/media/i2c/${i}
		cp -a drivers/media/i2c/${i}/*.h ${hdrdest}/drivers/media/i2c/${i}
	done

	# Add docbook makefile
	install -Dm644 Documentation/DocBook/Makefile \
		${hdrdest}/Documentation/DocBook/Makefile

	# Add md headers
	mkdir -p ${hdrdest}/drivers/md
	cp drivers/md/*.h ${hdrdest}/drivers/md

	# Add inotify.h
	mkdir -p ${hdrdest}/include/linux
	cp include/linux/inotify.h ${hdrdest}/include/linux

	# Add wireless headers
	mkdir -p ${hdrdest}/net/mac80211/
	cp net/mac80211/*.h ${hdrdest}/net/mac80211

	# add dvb headers for external modules
	mkdir -p ${hdrdest}/drivers/media/dvb-core
	cp drivers/media/dvb-core/*.h ${hdrdest}/drivers/media/dvb-core/
	mkdir -p ${hdrdest}/include/config/dvb/
	cp include/config/dvb/*.h ${hdrdest}/include/config/dvb/

	# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
	mkdir -p ${hdrdest}/drivers/media/dvb-frontends
	cp drivers/media/dvb-frontends/lgdt330x.h \
		${hdrdest}/drivers/media/dvb-frontends/
	cp drivers/media/i2c/msp3400-driver.h ${hdrdest}/drivers/media/i2c/

	# add dvb headers
	mkdir -p ${hdrdest}/drivers/media/usb/dvb-usb
	cp drivers/media/usb/dvb-usb/*.h ${hdrdest}/drivers/media/usb/dvb-usb/
	mkdir -p ${hdrdest}/drivers/media/dvb-frontends
	cp drivers/media/dvb-frontends/*.h ${hdrdest}/drivers/media/dvb-frontends/
	mkdir -p ${hdrdest}/drivers/media/tuners
	cp drivers/media/tuners/*.h ${hdrdest}/drivers/media/tuners/

	# Add xfs and shmem for aufs building
	mkdir -p ${hdrdest}/fs/xfs
	mkdir -p ${hdrdest}/mm
	cp fs/xfs/xfs_sb.h ${hdrdest}/fs/xfs/xfs_sb.h

	# Copy in Kconfig files
	for i in $(find . -name "Kconfig*"); do
		mkdir -p ${hdrdest}/$(echo $i | sed 's|/Kconfig.*||')
		cp $i ${hdrdest}/$i
	done

	# Remove unneeded architectures
	for arch in alpha arm* avr32 blackfin cris frv h8300 \
		ia64 m* p* s* um v850 xtensa; do
		rm -rf ${hdrdest}/arch/${arch}
	done

	# Compress all modules with gzip to save a few MBs.
	msg_normal "$pkgver: compressing kernel modules with gzip, please wait...\n"
	find ${DESTDIR} -name '*.ko' -exec gzip -9 {} \;

	# ... and run depmod again.
	depmod -b ${DESTDIR}/usr -F System.map ${_kernver}
}

linux3.16-headers_package() {
	preserve=yes
	nostrip=yes
	noverifyrdeps=yes
	short_desc+=" - source headers for 3rd party modules"
	pkg_install() {
		vmove usr/src
		vmove usr/lib/modules/${_kernver}/build
	}
}