-
Notifications
You must be signed in to change notification settings - Fork 38
/
build.sh
executable file
·192 lines (175 loc) · 5.97 KB
/
build.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
#!/bin/bash
# Copyright 2019-2021 Huawei Technologies Co., Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
export AKG_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/" && pwd )"
BUILD_DIR="${AKG_DIR}/build"
OUTPUT_PATH="${AKG_DIR}/output"
usage()
{
echo "Usage:"
echo "bash build.sh [-e cpu|gpu|ascend|all] [-j[n]] [-t on|off] [-o] [-u]"
echo ""
echo "Options:"
echo " -d Debug mode"
echo " -e Hardware environment: cpu, gpu, ascend or all"
echo " -j[n] Set the threads when building (Default: -j8)"
echo " -t Unit test: on or off (Default: off)"
echo " -o Output .o file directory"
echo " -u Enable auto tune"
}
mk_new_dir()
{
local create_dir="$1"
if [[ -d "${create_dir}" ]]; then
rm -rf "${create_dir}"
fi
mkdir -pv "${create_dir}"
}
write_checksum_tar()
{
cd "$OUTPUT_PATH" || exit
PACKAGE_LIST=$(ls lib*.tar.gz) || exit
for PACKAGE_NAME in $PACKAGE_LIST; do
echo $PACKAGE_NAME
sha256sum -b "$PACKAGE_NAME" >"$PACKAGE_NAME.sha256"
done
}
check_binary_file()
{
local binary_dir="$1"
for cur_file in `ls "${binary_dir}"/*.o`
do
file_lines=`cat "${cur_file}" | wc -l`
if [ ${file_lines} -eq 3 ]; then
check_sha=`cat ${cur_file} | grep "oid sha256"`
if [ $? -eq 0 ]; then
echo "-- Warning: ${cur_file} is not a valid binary file."
return 1
fi
fi
done
return 0
}
if [ ! -n "$1" ]; then
echo "Must input parameter!"
usage
exit 1
fi
# Parse arguments
THREAD_NUM=32
SIMD_SET=off
CMAKE_ARGS=""
while getopts 'e:j:u:t:od' opt
do
case "${opt}" in
e)
if [[ "${OPTARG}" == "gpu" ]]; then
CMAKE_ARGS="${CMAKE_ARGS} -DUSE_CUDA=ON -DUSE_LLVM=ON"
elif [[ "${OPTARG}" == "ascend" ]]; then
CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_D=ON -DUSE_LLVM=ON"
elif [[ "${OPTARG}" == "cpu" ]]; then
# AKG requires LLVM on CPU, the optimal version is 12.xx.xx.
# if not found in the environment, it will find another existing version to use.
CMAKE_ARGS="${CMAKE_ARGS} -DUSE_LLVM=ON"
elif [[ "${OPTARG}" == "all" ]]; then
CMAKE_ARGS="${CMAKE_ARGS} -DUSE_CUDA=ON -DENABLE_D=ON -DUSE_LLVM=ON"
else
echo "Unknown parameter ${OPTARG}!"
usage
exit 1
fi
;;
j)
THREAD_NUM=${OPTARG}
;;
t)
;;
u)
CMAKE_ARGS="${CMAKE_ARGS} -DUSE_AUTO_TUNE=1"
;;
d)
CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_BUILD_TYPE=Debug -DUSE_AKG_LOG=1"
;;
o)
arch_info=`arch | tr '[A-Z]' '[a-z]'`
arch_name=""
if [[ "${arch_info}" =~ "aarch64" ]]; then
arch_name="aarch64"
elif [[ "${arch_info}" =~ "x86_64" ]]; then
arch_name="x86_64"
else
echo "-- Warning: Only supports aarch64 and x86_64, but current is ${arch_info}"
exit 1
fi
akg_extend_dir="${AKG_DIR}/prebuild/${arch_name}"
if [ ! -d "${akg_extend_dir}" ]; then
echo "-- Warning: Prebuild binary file directory ${akg_extend_dir} not exits"
exit 1
fi
check_binary_file "${akg_extend_dir}"
if [ $? -ne 0 ]; then
GIT_LFS=`which git-lfs`
if [ $? -ne 0 ]; then
echo "-- Warning: git lfs not found, you can perform the following steps:"
echo " 1. Install git lfs, refer https://github.com/git-lfs/git-lfs/wiki/installation"
echo " 2. After installing git lfs, do not forget executing the following command:"
echo " git lfs install"
echo " 3. Download the files tracked by git lfs, executing the following commands:"
echo " cd ${AKG_DIR}"
echo " git lfs pull"
echo " 4. Re-compile the source codes"
exit 1
else
echo "-- Warning: git lfs found, but lfs files are not downloaded, you can perform the following steps:"
echo " 1. After installing git lfs, do not forget executing the following command:"
echo " git lfs install"
echo " 2. Download the files tracked by git lfs, executing the following commands:"
echo " cd ${AKG_DIR}"
echo " git lfs pull"
echo " 3. Re-compile the source codes"
exit 1
fi
fi
echo "${akg_extend_dir}"
exit 0
;;
*)
echo "Unknown option ${opt}!"
usage
exit 1
esac
done
echo "CMAKE_ARGS: ${CMAKE_ARGS}"
# Create directories
mkdir -pv "${BUILD_DIR}"
mkdir -pv "${OUTPUT_PATH}"
echo "---------------- AKG: build start ----------------"
# Build target
cd $BUILD_DIR
cmake .. ${CMAKE_ARGS}
make -j$THREAD_NUM
make install
if [ ! -f "libakg.so" ];then
echo "[ERROR] libakg.so not exist!"
exit 1
fi
# Copy target to output/ directory
cp libakg.so ${OUTPUT_PATH}
cd ${OUTPUT_PATH}
tar czvf libakg.tar.gz libakg.so
rm -rf libakg.so
write_checksum_tar
bash ${AKG_DIR}/scripts/package.sh
cd -
echo "---------------- AKG: build end ----------------"