forked from microsoft/AirSim
-
Notifications
You must be signed in to change notification settings - Fork 3
/
__runBuild.sh
executable file
·162 lines (133 loc) · 4.45 KB
/
__runBuild.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
#!/usr/bin/env bash
# get path of current script: https://stackoverflow.com/a/39340259/207661
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
pushd "$SCRIPT_DIR" >/dev/null
set -e
set -x
debug=false
gcc=false
# Parse command line arguments
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
--debug)
debug=true
shift # past argument
;;
--gcc)
gcc=true
shift # past argument
;;
esac
done
function version_less_than_equal_to() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" = "$1"; }
# check for rpclib
RPC_VERSION_FOLDER="rpclib-2.3.0"
if [ ! -d "./external/rpclib/$RPC_VERSION_FOLDER" ]; then
echo "ERROR: new version of AirSim requires newer rpclib."
echo "please run setup.sh first and then run build.sh again."
exit 1
fi
# check for local cmake build created by setup.sh
if [ -d "./cmake_build" ]; then
if [ "$(uname)" == "Darwin" ]; then
CMAKE="$(greadlink -f cmake_build/bin/cmake)"
else
CMAKE="$(readlink -f cmake_build/bin/cmake)"
fi
else
CMAKE=$(which cmake)
fi
# variable for build output
if $debug; then
build_dir=build_debug
else
build_dir=build_release
fi
echo $build_dir
if [ "$(uname)" == "Darwin" ]; then
# llvm v8 is too old for Big Sur see
# https://github.com/microsoft/AirSim/issues/3691
#export CC=/usr/local/opt/llvm@8/bin/clang
#export CXX=/usr/local/opt/llvm@8/bin/clang++
#now pick up whatever setup.sh installs
export CC="$(brew --prefix)/opt/llvm/bin/clang"
export CXX="$(brew --prefix)/opt/llvm/bin/clang++"
else
if $gcc; then
export CC="gcc-8"
export CXX="g++-8"
else
export CC="clang-8"
export CXX="clang++-8"
fi
fi
#install EIGEN library
if [[ ! -d "./AirLib/deps/eigen3/Eigen" ]]; then
echo "### Eigen is not installed. Please run setup.sh first."
exit 1
fi
echo "putting build in $build_dir folder, to clean, just delete the directory..."
# this ensures the cmake files will be built in our $build_dir instead.
if [[ -f "./cmake/CMakeCache.txt" ]]; then
rm "./cmake/CMakeCache.txt"
fi
if [[ -d "./cmake/CMakeFiles" ]]; then
rm -rf "./cmake/CMakeFiles"
fi
if [[ ! -d $build_dir ]]; then
mkdir -p $build_dir
fi
# Fix for Unreal/Unity using x86_64 (Rosetta) on Apple Silicon hardware.
CMAKE_VARS=
if [ "$(uname)" == "Darwin" ]; then
CMAKE_VARS="-DCMAKE_APPLE_SILICON_PROCESSOR=x86_64"
fi
pushd $build_dir >/dev/null
if $debug; then
folder_name="Debug"
"$CMAKE" ../cmake -DCMAKE_BUILD_TYPE=Debug $CMAKE_VARS \
|| (popd && rm -r $build_dir && exit 1)
else
folder_name="Release"
"$CMAKE" ../cmake -DCMAKE_BUILD_TYPE=Release $CMAKE_VARS \
|| (popd && rm -r $build_dir && exit 1)
fi
popd >/dev/null
pushd $build_dir >/dev/null
# final linking of the binaries can fail due to a missing libc++abi library
# (happens on Fedora, see https://bugzilla.redhat.com/show_bug.cgi?id=1332306).
# So we only build the libraries here for now
make -j"$(nproc)"
popd >/dev/null
mkdir -p AirLib/lib/x64/$folder_name
mkdir -p AirLib/deps/rpclib/lib
mkdir -p AirLib/deps/MavLinkCom/lib
cp $build_dir/output/lib/libAirLib.a AirLib/lib
cp $build_dir/output/lib/libMavLinkCom.a AirLib/deps/MavLinkCom/lib
cp $build_dir/output/lib/librpc.a AirLib/deps/rpclib/lib/librpc.a
# Update AirLib/lib, AirLib/deps, Plugins folders with new binaries
rsync -a --delete $build_dir/output/lib/ AirLib/lib/x64/$folder_name
rsync -a --delete external/rpclib/$RPC_VERSION_FOLDER/include AirLib/deps/rpclib
rsync -a --delete MavLinkCom/include AirLib/deps/MavLinkCom
# TODO: Change to move AirLib to the blocks environment, since we are only using 1
#rsync -a --delete AirLib Unreal/Plugins/AirSim/Source
rsync -a --delete AirLib Unreal/Environments/Blocks/Plugins/AirSim/Source
#rm -rf Unreal/Plugins/AirSim/Source/AirLib/src
rm -rf Unreal/Environments/Blocks/Plugins/AirSim/Source/AirLib/src
# Update Blocks project
Unreal/Environments/Blocks/clean.sh
#mkdir -p Unreal/Environments/Blocks/Plugins
#rsync -a --delete Unreal/Plugins/AirSim Unreal/Environments/Blocks/Plugins
# Update Plugins file
rsync -a --delete Unreal/Environments/Blocks/Plugins/AirSim Unreal/Plugins
set +x
echo ""
echo ""
echo "=================================================================="
echo " Git changes"
echo "=================================================================="
git status
echo "=================================================================="
popd >/dev/null