-
Notifications
You must be signed in to change notification settings - Fork 0
/
build_eos.sh
240 lines (210 loc) · 6.42 KB
/
build_eos.sh
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
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
#!/bin/sh
source $(dirname "$0")/prompt_input_yN/prompt_input_yN.sh
build_boost()
{
export PATH=/usr/lib/llvm/4/bin:${PATH}
WD=${USER_GIT_ROOT}/boost
if [ ! -d ${WD} ]; then
git clone --recursive \
--single-branch \
--branch boost-1.67.0 \
[email protected]:boostorg/boost.git \
${WD}
fi
cd ${WD}
if prompt_input_yN "git clean and checkout"; then
git clean -fdx
git checkout .
fi
mkdir -p {build,release}
./bootstrap.sh \
--with-toolset=clang
./b2 \
--ignore-site-config \
-j${NPROC} \
--prefix=${WD}/release \
--with-test \
toolset=clang \
threading=multi \
headers
./b2 \
--ignore-site-config \
-j${NPROC} \
--prefix=${WD}/release \
--with-test \
toolset=clang \
threading=multi \
install
}
build_eos()
{
NPROC=$(getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1)
export NPROC
if [ "${USER_GIT_ROOT}" = "" ]; then
printf "absolute path to clone required projects into, USER_GIT_ROOT="
read USER_GIT_ROOT
fi
case "${USER_GIT_ROOT}" in
/*) ;;
*) printf "error: not an absolute path\n"; return 1 ;;
esac
export USER_GIT_ROOT
mkdir -p ${USER_GIT_ROOT}
prompt_input_yN "build secp256k1-zkp" && build_secp256k1
if prompt_input_yN "build llvm"; then
prompt_input_yN "install to system prefix (use portage)" && build_llvm_funtoo || build_llvm_out
fi
prompt_input_yN "build boost" && build_boost
prompt_input_yN "build eos" || return 0
WD=${USER_GIT_ROOT}/eos
if [ ! -d ${WD} ]; then
git clone --recursive [email protected]:EOS-Mainnet/eos.git ${WD}
fi
PWG=$(pwd)
cd ${WD}
if prompt_input_yN "git clean and checkout"; then
git clean -fdx 2>/dev/null || sudo git clean -fdx
git checkout .
fi
git branch
if prompt_input_yN "checkout specific tag"; then
git fetch --all
git tag
printf "TAG="
read TAG
fi
if prompt_input_yN "git pull"; then
git checkout ${TAG}
git pull origin ${TAG}
git submodule sync
git submodule update --init --recursive
fi
if prompt_input_yN "install to custom prefix"; then
printf "absolute release path, INSTALL_PREFIX="
read INSTALL_PREFIX
case "${INSTALL_PREFIX}" in
/*) ;;
*) printf "error: not an absolute path\n"; return 1 ;;
esac
mkdir -p ${INSTALL_PREFIX}
INSTALL_PREFIX="-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}"
fi
CXX_COMPILER=/usr/lib/llvm/4/bin/clang++
C_COMPILER=/usr/lib/llvm/4/bin/clang
LLVM_DIR=/usr/lib/llvm/4/lib64/cmake/llvm
WASM_ROOT=/usr/lib/llvm/4
if [ -d ${USER_GIT_ROOT}/llvm/release ] \
&& prompt_input_yN "use custom llvm"; then
CXX_COMPILER=${USER_GIT_ROOT}/llvm/release/bin/clang++
C_COMPILER=${USER_GIT_ROOT}/llvm/release/bin/clang
LLVM_DIR=${USER_GIT_ROOT}/llvm/release
WASM_ROOT=${USER_GIT_ROOT}/llvm/release
fi
mkdir -p build
cd build
cmake \
${INSTALL_PREFIX} \
-DBOOST_ROOT=${USER_GIT_ROOT}/boost/release \
-DCMAKE_CXX_COMPILER=${CXX_COMPILER} \
-DCMAKE_C_COMPILER=${C_COMPILER} \
-DCMAKE_EXE_LINKER_FLAGS="-lpthread -lLLVMInstCombine -lLLVMTransformUtils -lLLVMScalarOpts -lLLVMExecutionEngine -lLLVMObject -lLLVMRuntimeDyld" \
-DLLVM_DIR=${LLVM_DIR} \
-DSecp256k1_ROOT_DIR=${USER_GIT_ROOT}/secp256k1-zkp/release \
-DWASM_ROOT=${WASM_ROOT} \
..
make -j${NPROC}
prompt_input_yN "sudo make install" && sudo make install
cd ${PWD}
}
build_llvm_funtoo()
{
PWD=$(pwd)
cd
if [ ! -f /etc/portage/repos.conf/llvm_wasm ]; then
cat > llvm_wasm << EOF
[DEFAULT]
main-repo = core-kit
[llvm_wasm]
location = /var/git/llvm_wasm
auto-sync = no
priority = 10
EOF
sudo mv llvm_wasm /etc/portage/repos.conf/
fi
if [ "$(groups | grep portage)" = "" ]; then
sudo usermod -aG portage $(whoami)
fi
if [ -d /var/git/llvm_wasm ]; then
git --git-dir=/var/git/llvm_wasm/.git --work-tree=/var/git/llvm_wasm pull origin
else
git clone [email protected]:zrts/llvm_wasm.git
sudo chmod g+w /var/git
sudo mv llvm_wasm /var/git
fi
if [ -d /etc/portage/package.use ]; then
if [ ! -f /etc/portage/package.use/llvm ]; then
printf "=sys-devel/llvm-4.0.1-r1::llvm_wasm wasm" > llvm
sudo mv llvm /etc/portage/package.use
fi
else
USE_LINE="=sys-devel/llvm-4.0.1-r1::llvm_wasm wasm"
if [ "$(grep ${USE_LINE} /etc/portage/package.use)" = "" ]; then
sudo cat /etc/portage/package.use > package.use
printf "${USE_LINE}" >> package.use
sudo mv package.use /etc/portage
fi
fi
sudo ego sync
sudo emerge "=sys-devel/clang-4.0.1" "=sys-devel/llvm-4.0.1-r1::llvm_wasm"
cd ${PWD}
}
build_llvm_out()
{
WD=${USER_GIT_ROOT}/llvm
if [ ! -d ${WD} ]; then
git clone \
--depth 1 \
--single-branch \
--branch release_40 \
[email protected]:llvm-mirror/llvm.git ${WD}
git clone \
--depth 1 \
--single-branch \
--branch release_40 \
[email protected]:llvm-mirror/clang.git ${WD}/tools/clang
fi
cd ${WD}
if prompt_input_yN "git clean and checkout"; then
git clean -fdx
git checkout .
fi
mkdir {build,release}
cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=/usr/lib/llvm/4/bin/clang++ \
-DCMAKE_C_COMPILER=/usr/lib/llvm/4/bin/clang \
-DCMAKE_INSTALL_PREFIX=${WD}/release \
-DCORE_SYMBOL_NAME="EOS" \
-DLLVM_ENABLE_RTTI=On \
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
-DLLVM_TARGETS_TO_BUILD=X86 \
-G "Unix Makefiles" \
..
make -j${NPROC} install
}
build_secp256k1()
{
WD=${USER_GIT_ROOT}/secp256k1-zkp
if [ ! -d ${WD} ]; then
git clone [email protected]:cryptonomex/secp256k1-zkp.git ${WD}
fi
cd ${WD}
if prompt_input_yN "git clean and checkout"; then
git clean -fdx
git checkout .
fi
./autogen.sh
./configure --prefix=${WD}/release
gmake -j${NPROC} install
}