-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbuild_third_party.sh
executable file
·163 lines (136 loc) · 4.19 KB
/
build_third_party.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
#!/usr/bin/env bash
# Получаем корневую дирректорию
readonly ROOT=$(cd "$(dirname "$0")" && pwd)
# Запоминаем комманду
CMD=$1
# Получаем версию OS
OS=$(uname -a | awk '{print $1}')
if [[ $OS =~ "MINGW64" ]]; then
OS="Windows"
fi
if [ -n "$CMD" ]; then
if [ $CMD = "--clean" ] || [ $CMD = "--reset" ]; then
# Очистка подпроекта
clean_submodule(){
cd "$ROOT/submodules/$1" || exit 1
git clean -dfx
git stash
cd "$ROOT" || exit 1
}
# Очистка директории
clean_directory(){
git clean -dfx "$1"
}
if [ $CMD = "--reset" ]; then
clean_submodule "alm"
"$ROOT/submodules/alm/build_third_party.sh" --clean
else
rm -f "$ROOT/submodules/alm/.stamp_done"
rm -rf "$ROOT/submodules/alm/build"
fi
rm -rf "$ROOT/third_party"
printf "\n****************************************"
printf "\n************ Success!!! ************"
printf "\n****************************************"
printf "\n\n\n"
exit 0
elif [ $CMD != "--update" ]; then
printf "Usage: config [options]\n"
printf " --clean - Cleaning all submodules and build directory\n"
exit 1
fi
fi
# Устанавливаем систему сборки
if [[ $OS = "Windows" ]]; then
export BUILD="mingw32-make"
else
export BUILD="make"
fi
# Каталог для установки собранных библиотек
PREFIX="$ROOT/third_party"
export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig"
# Устанавливаем флаги глобального использования
# export CPPFLAGS=""
export CXXFLAGS="$CXXFLAGS -fPIC"
export CFLAGS="-I$PREFIX/include -fPIC"
export LDFLAGS="-L$PREFIX/lib"
export LD_LIBRARY_PATH="$PREFIX/lib"
# Создаём каталоги
mkdir -p "$PREFIX/bin"
mkdir -p "$PREFIX/lib"
mkdir -p "$PREFIX/include"
# Определяем количество логических ядер
if [ $OS = "Darwin" ]; then
numproc=$(sysctl -n hw.logicalcpu)
elif [ $OS = "FreeBSD" ]; then
numproc=$(sysctl -n hw.ncpu)
else
numproc=$(nproc)
fi
# Применяем патчи
apply_patch(){
patch="$ROOT/patches/$1/$2"
if ! git apply --reverse --check "$patch" 2> /dev/null; then
echo "applaying patch $patch"
git apply "$patch" || exit 1
else
echo "patch $patch already applied"
fi
}
if [[ $CMD != "--update" ]]; then
# Выполняем синхронизацию сабмодулей
git submodule sync
# Инициализируем подпроекты
git submodule update --init --recursive
fi
# Сборка ALM
src="$ROOT/submodules/alm"
if [ ! -f "$src/.stamp_done" ]; then
printf "\n****** ANYKS LANGUAGE MODEL ******\n"
cd "$src" || exit 1
if [[ $CMD = "--update" ]]; then
# Выполняем обновление репозитория
git pull origin master
else
# Выполняем сборку зависимостей
./build_third_party.sh
fi
# Создаём каталог сборки
mkdir -p "build" || exit 1
# Переходим в каталог
cd "build" || exit 1
# Удаляем старый файл кэша
rm -rf "$ROOT/build/CMakeCache.txt"
# Выполняем конфигурацию проекта
if [[ $OS = "Windows" ]]; then
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_INSTALL_PREFIX="$PREFIX" \
-G "MinGW Makefiles" \
.. || exit 1
else
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$PREFIX" \
.. || exit 1
fi
# Выполняем сборку на всех логических ядрах
$BUILD -j"$numproc" || exit 1
# Выполняем установку проекта
$BUILD install || exit 1
# Помечаем флагом, что сборка и установка произведена
touch "$src/.stamp_done"
cd "$ROOT" || exit 1
fi
# Переименовываем расширение библиотек для Windows
if [ $OS = "Windows" ]; then # Windows
for i in $(ls "$PREFIX/lib" | grep .a$);
do
mv "$PREFIX/lib/$i" "$PREFIX/lib/$(basename "$i" .a).lib"
done
fi
printf "\n****************************************"
printf "\n************ Success!!! ************"
printf "\n****************************************"
printf "\n\n\n"