blob: 947e84499330f7b38d8d75f160a8201e9687f1c0 (
plain)
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
|
# Contributor: Lex Black <autumn-wind at web dot de>
# Contributor: Jens Staal <staal1978@gmail.com>
pkgbase=llvmlinux-git
pkgname=${pkgbase}
pkgver=4.3.rc3.r42.g3225031
pkgrel=1
pkgdesc="The Linux Kernel built with (native) LLVM/Clang"
arch=('i686' 'x86_64')
url="http://llvm.linuxfoundation.org/index.php/Main_Page"
license=('GPL2')
depends=('coreutils' 'linux-firmware' 'mkinitcpio')
makedepends=('git' 'quilt' 'llvm' 'clang')
optdepends=('crda: to set the correct wireless channels of your country')
backup=("etc/mkinitcpio.d/${pkgbase}.preset")
install=llvmlinux-git.install
options=(!strip)
#add the source checkouts in sources to avoid having to repeat them.
source=('llvmlinux'::'git://git.linuxfoundation.org/llvmlinux.git'
'kernel'::'git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git'
'https://projects.archlinux.org/svntogit/packages.git/snapshot/packages-packages/linux.tar.gz'
'llvmlinux-git.preset')
md5sums=('SKIP'
'SKIP'
'9a24944400fadce1f73539b521366c39'
'951a65b16527d6f9058bcde1ec2ec158')
export CC=clang
export CXX=clang++
export KARCH=x86
export USE_ARCH_PATCH="yes"
pkgver() {
cd kernel
git describe --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/v//'
}
prepare() {
# ok some hacking needed to get this working...
ln -s ${srcdir}/kernel ${srcdir}/llvmlinux/arch/all/kernel.git
##### Adjust targets #####
# llvmlinux offers for i586. Arch just provides i686, so does clang
cd $srcdir/llvmlinux
mv targets/i586 targets/i686
mv targets/i686/config_i586 targets/i686/config_i686
sed -i 's/i586/i686/g' targets/i686/Makefile
mv arch/i586 arch/i686
mv arch/i686/i586.mk arch/i686/i686.mk
sed -i 's/i586/i686/g' arch/i686/i686.mk
_config=${srcdir}/llvmlinux/targets/${CARCH}/config_${CARCH}
#Add stuff to the default llvmlinux config
sed -i 's|# CONFIG_BTRFS_FS is not set|CONFIG_BTRFS_FS=m \n CONFIG_BTRFS_FS_POSIX_ACL=y|g' ${_config}
_archstuff="${srcdir}/packages-packages/linux/trunk"
##### Config #####
# Using Arch Linux Kernel Config (32-bit or 64-bit. Depending on $CARCH)
#if [ ${CARCH} == i686 ]; then
# cp ${_archstuff}/config ${srcdir}/llvmlinux/targets/${CARCH}/config_${CARCH}
#else
# cp ${_archstuff}/config.x86_64 ${srcdir}/llvmlinux/targets/${CARCH}/config_${CARCH}
#fi
# Alternative methods to configure the kernel. Replace the line below with one of your choice.
cd $srcdir/kernel
#make menuconfig # CLI menu for configuration
#make nconfig # new CLI menu for configuration
#make xconfig # X-based configuration
#make oldconfig # using old config from previous kernel version
# ... or manually edit .config
make localmodconfig
#Copy generated config to llvm target directory
cp .config ${srcdir}/llvmlinux/targets/${CARCH}/config_${CARCH}
# fixing some configuration options
sed -i 's|CONFIG_LOCALVERSION="-ARCH"|CONFIG_LOCALVERSION="-llvmlinux"|g' ${_config}
sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ${_config}
##### ARCH patch #####
if [ ${USE_ARCH_PATCH} == yes ]; then
# patch kernel sources with Arch linux kernel patches
mkdir ${srcdir}/llvmlinux/targets/${CARCH}/patches/
cp ${_archstuff}/*.patch ${srcdir}/llvmlinux/targets/${CARCH}/patches/
fi
}
build() {
cd llvmlinux/targets/${CARCH}/
# "native" means distro-installed clang (over 3.3 needed).
make CLANG_TOOLCHAIN=native kernel-build
}
package() {
cd llvmlinux/targets/${CARCH}/src/linux
# don't run depmod on 'make install'. We'll do this ourselves in packaging
sed -i '2iexit 0' scripts/depmod.sh
# get kernel version
_kernver="$(make LOCALVERSION= kernelrelease)"
_basekernel=${_kernver%%-*}
_basekernel=${_basekernel%.*}
mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
make LOCALVERSION= INSTALL_MOD_PATH="$pkgdir" modules_install
cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}"
# add vmlinux
install -D -m644 vmlinux "${pkgdir}/usr/src/linux-${_kernver}/vmlinux"
# set correct depmod command for install
cp -f "${startdir}/${install}" "${startdir}/${install}.pkg"
true && install=${install}.pkg
sed \
-e "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/" \
-e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" \
-i "${startdir}/${install}"
# install mkinitcpio preset file for kernel
install -D -m644 "${srcdir}/llvmlinux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
sed \
-e "1s|'linux.*'|'${pkgbase}'|" \
-e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \
-e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \
-e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \
-i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
# remove build and source links
rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build}
# remove the firmware
rm -rf "${pkgdir}/lib/firmware"
# gzip -9 all modules to save 100MB of space
find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
# Now we call depmod...
depmod -b "$pkgdir" -F System.map "$_kernver"
# move module tree /lib -> /usr/lib
mv "$pkgdir/lib" "$pkgdir/usr"
}
|