blob: 9111bb72e375f6e6a6e951467e0545532f34a7d6 (
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
149
150
151
|
# Mostly self contained setup to build a stage2 ghc for musl
from debian:8.0
# Install stock bindist for cross compile
env ghc 8.0.2
env arch x86_64
env llvm 3.7.1
env cabal 1.24.0.2
env destarch armhf
env tardir /tmp/root
env destdir /tmp/root/$destarch
env triple arm-unknown-linux-musleabihf
env target arm-linux-musleabihf
env crosscc $triple-gcc
# add cross toolchain to PATH
env PATH /usr/$triple/bin:$PATH
# all needed packages for compiling
run apt-get clean && \
apt-get update && \
apt-get install -y \
binutils-gold \
musl-tools \
build-essential \
wget \
curl \
libncurses-dev \
autoconf \
elfutils \
libgmp-dev \
zlib1g-dev \
git \
libtool \
pkg-config \
libffi-dev \
cmake \
g++ \
python \
pixz \
openssl \
bison \
git \
flex
add http://llvm.org/releases/$llvm/llvm-$llvm.src.tar.xz /tmp/
add http://llvm.org/releases/$llvm/polly-$llvm.src.tar.xz /tmp/
# Install a non ancient version of llvm on debian, I'm purposefully ignoring
# debian repos in favor of compiling to not have to deal with
# "what debian upstream has a current version of llvm" nonsense, takes more
# time to do that than just build the right llvm from source.
workdir /tmp
copy llvm-$llvm.sh /tmp/llvm.sh
run openssl sha1 llvm-$llvm.src.tar.xz | grep "SHA1(llvm-3.7.1.src.tar.xz)= 5dbdcafac105273dcbff94c68837a66c6dd78cef" && \
openssl sha1 polly-$llvm.src.tar.xz | grep "SHA1(polly-3.7.1.src.tar.xz)= 0e3a461907cde7505fbdb44bf61ff318aa9254f7" && \
tar xJpf /tmp/llvm-$llvm.src.tar.xz && \
tar xJpf /tmp/polly-$llvm.src.tar.xz && \
/tmp/llvm.sh && \
rm -fr /tmp/llvm-$llvm.src /tmp/build
add https://downloads.haskell.org/~ghc/$ghc/ghc-$ghc-$arch-deb8-linux.tar.xz /tmp/
# Install debian ghc binary from upstream.
workdir /tmp
run openssl sha1 ghc-$ghc-$arch-deb8-linux.tar.xz | grep "SHA1(ghc-$ghc-x86_64-deb8-linux.tar.xz)= f298b7d0f37cc9ded7ac66b2662b0fa5ac6d0809" && \
tar xJpf /tmp/ghc-$ghc-$arch-deb8-linux.tar.xz
workdir /tmp/ghc-$ghc
run ./configure --prefix=/usr && \
make -j1 install && \
rm -fr /tmp/ghc-$ghc
run curl -kL https://www.haskell.org/cabal/release/cabal-install-$cabal/cabal-install-$cabal.tar.gz -o /tmp/cabal-install-$cabal.tar.gz
# Install cabal so we can install alex/happy to pull off of git
# bootstrap cabal and install alex/happy the same way apks are built
# only globally
workdir /tmp
run openssl sha1 cabal-install-$cabal.tar.gz | grep "SHA1(cabal-install-$cabal.tar.gz)= ca019360c45be32e224b6582ab46b420fb070417" && \
tar xzpf /tmp/cabal-install-$cabal.tar.gz
workdir /tmp/cabal-install-$cabal
run ./bootstrap.sh --global --no-doc && \
cabal update && \
cabal install --global alex happy && \
rm -fr /tmp/cabal-install-$cabal
workdir /tmp
run git clone --depth 1 https://github.com/GregorR/musl-cross.git musl-cross
workdir /tmp/musl-cross
run echo GCC_BUILTIN_PREREQS=yes >> config.sh && \
echo TRIPLE=${triple} >> config.sh && \
echo ARCH=arm >> config.sh && \
echo GCC_BOOTSTRAP_CONFFLAGS=\"--with-arch=armv6 --with-float=hard --with-fpu=vfp\" >> config.sh && \
echo GCC_CONFFLAGS=\"--with-arch=armv6 --with-float=hard --with-fpu=vfp\" >> config.sh && \
echo GCC_STAGE1_NOOPT=1 >> config.sh && \
echo CC_BASE_PREFIX=/usr >> config.sh && \
echo MAKEFLAGS=-j$(grep -c processor /proc/cpuinfo) >> config.sh && \
echo "BINUTILS_CONFFLAGS='CXXFLAGS=-fpermissive --enable-gold --enable-plugins --disable-werror'" >> config.sh && \
echo "CFLAGS='-g -O2 -fPIC -DPIC'" >> config.sh && \
echo "CPPFLAGS='-fPIC -DPIC'" >> config.sh && \
echo "LDFLAGS='-fPIC -DPIC'" >> config.sh
copy gmpurl.patch gmpurl.patch
run patch -p1 < gmpurl.patch && \
./build.sh && \
rm -fr /tmp/musl-cross
add http://downloads.haskell.org/~ghc/$ghc/ghc-$ghc-src.tar.xz /tmp/
workdir /tmp
run openssl sha1 ghc-$ghc-src.tar.xz | grep "SHA1(ghc-$ghc-src.tar.xz)= 0e0ae6d5ba119c10f3c7b807d35166e7c06b9b35" && \
tar xJpf /tmp/ghc-$ghc-src.tar.xz
workdir /tmp/ghc-$ghc
copy bootstrap.patch bootstrap.patch
copy rm-ghc-pwd.patch rm-ghc-pwd.patch
run patch -p1 < bootstrap.patch && \
patch -p1 < rm-ghc-pwd.patch
run cp mk/build.mk.sample mk/build.mk && \
./boot && \
echo "BuildFlavour = perf-llvm" >> mk/build.mk && \
echo "BeConservative = YES" >> mk/build.mk && \
echo "INTEGER_LIBRARY = integer-simple" >> mk/build.mk && \
echo "HADDOCK_DOCS = NO" >> mk/build.mk && \
echo "BUILD_SPHINX_HTML = NO" >> mk/build.mk && \
echo "BUILD_SPHINX_PS = NO" >> mk/build.mk && \
echo "BUILD_SPHINX_PDF = NO" >> mk/build.mk && \
echo "SplitSections = YES" >> mk/build.mk && \
echo "V = 0" >> mk/build.mk && \
echo "SPLIT_CMD = :" >> mk/build.mk && \
./configure \
--target=$triple \
--prefix=/usr
run make -j$(grep -c processor /proc/cpuinfo) || make -j1
run make -j1 install DESTDIR=$destdir
run find $destdir -name "*hp2ps" -exec rm {} \;
# remove target prefix from stage2 binaries
# HACK, just build unlit with the cross compiler and move it to /usr/bin in the install dir
workdir /tmp/ghc-$ghc/utils/unlit
run $crosscc unlit.c -o $(find $destdir -name unlit)
# remove target prefix from stage2 binaries
workdir $destdir/usr/bin
run (for i in $triple-* ; do ln -s $i ${i#$triple-} || /bin/true; done ) && \
rm -fr $destdir/usr/share/doc
workdir $tardir
# Compress to xz via pixz because xz is normally too
# old for -TN multithreads
run tar -I'pixz -9' -cf /tmp/ghc-$ghc-$destarch.tar.xz .
|