1
+ #! /bin/bash -e
2
+ export SCRIPTSDIR=$( cd $( dirname $( readlink --canonicalize $0 ) ) && pwd)
3
+ export SCRIPTSDIRNAME=$( basename ${SCRIPTSDIR} )
4
+ export ROOT=$( cd $( dirname $( readlink --canonicalize $0 ) ) && cd .. && pwd)
5
+ if [ -f ${ROOT} /opts.sh ]; then
6
+ echo " Loading options from ${ROOT} /opts.sh"
7
+ source ${ROOT} /opts.sh
8
+ fi
9
+
10
+ # These variables may be overridden/set by the environment, or, more preferably,
11
+ # by a line in opts.sh
12
+ export CMAKE=" ${CMAKE:- cmake} "
13
+ export GENERATOR=" ${GENERATOR:- Ninja} "
14
+ export ANDROID_PLATFORM=${ANDROID_PLATFORM:- android-24}
15
+ export ANDROID_NDK=" ${ANDROID_NDK} "
16
+ export BUILD=${BUILD:- ${ROOT} / build}
17
+ export CONFIG=${CONFIG:- Release}
18
+ export ANDROID_ABI=${ANDROID_ABI:- armeabi-v7a}
19
+ export INSTALL=${INSTALL:- ${BUILD} / ${ANDROID_ABI} / install}
20
+ export HOST_INSTALL=${INSTALL:- ${BUILD} / host/ install}
21
+ export SHOULD_CONFIGURE=${SHOULD_CONFIGURE:- true}
22
+
23
+ if [ " ${ANDROID_NDK} " == " " ]; then
24
+ echo " Must run or add the following to opts.sh: export ANDROID_NDK=/path/to/your/android/ndk"
25
+ exit 1
26
+ fi
27
+
28
+ export BOOST_VER=1.65.1
29
+ export BOOST_FN=boost_${BOOST_VER// ./ _} .tar.bz2
30
+ export BOOST_URL=https://dl.bintray.com/boostorg/release/${BOOST_VER} /source/${BOOST_FN}
31
+ export TARGET_CMAKE_PREFIX_PATH=${INSTALL}
32
+
33
+ OPENCV_VERSION=2.4.11
34
+ OPENCV_SHA1=ACFB4789B78752AE5C52CC5C151E2AE3DD006CEF
35
+ OPENCV_FN=OpenCV-${OPENCV_VERSION} -android-sdk.zip
36
+ OPENCV_URL=http://downloads.sourceforge.net/project/opencvlibrary/opencv-android/${OPENCV_VERSION} /${OPENCV_FN}
37
+
38
+ # ## Generic Helper Functions
39
+ target_build_dir () {
40
+ echo ${BUILD} /${ANDROID_ABI} /${1}
41
+ }
42
+ host_build_dir () {
43
+ echo ${BUILD} /host/${1}
44
+ }
45
+ target_cmake_build () {
46
+ project=$1
47
+ shift
48
+ src=$( cd $1 && pwd)
49
+ shift
50
+ build=$( target_build_dir $project )
51
+ echo -e " [Target]\t CMake build of ${project} with:"
52
+ echo " source: ${src} "
53
+ echo " build: ${build} "
54
+ mkdir -p " ${build} "
55
+ (
56
+ cd " ${build} "
57
+ set -x
58
+ if $SHOULD_CONFIGURE ; then
59
+ ${CMAKE} ${EXTRA_CMAKE_ARGS} \
60
+ -G " ${GENERATOR} " \
61
+ -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK} /build/cmake/android.toolchain.cmake \
62
+ -DANDROID_TOOLCHAIN=clang \
63
+ -DANDROID_STL=c++_shared \
64
+ " -DANDROID_ABI=${ANDROID_ABI} " \
65
+ -DANDROID_PLATFORM=${ANDROID_PLATFORM} \
66
+ -DANDROID_CPP_FEATURES=" rtti;exceptions" \
67
+ -DCMAKE_INSTALL_PREFIX=${INSTALL} \
68
+ -DCMAKE_FIND_ROOT_PATH=${INSTALL} \
69
+ -DCMAKE_PREFIX_PATH=" ${TARGET_CMAKE_PREFIX_PATH} " \
70
+ -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH \
71
+ -DCMAKE_BUILD_TYPE=${CONFIG} \
72
+ ${TARGET_CMAKE_ARGS} \
73
+ " $@ " \
74
+ ${src}
75
+ fi
76
+ ${CMAKE} --build .
77
+ ${CMAKE} --build . --target install
78
+ set +x
79
+ )
80
+ }
81
+ append_project_config_to_cmake () {
82
+ project=$1
83
+ # if [ "${CMAKE_MODULE_PATH}" ]; then
84
+ # CMAKE_MODULE_PATH="${CMAKE_MODULE_PATH};"
85
+ # fi
86
+ # export CMAKE_MODULE_PATH="${CMAKE_MODULE_PATH}${INSTALL}/lib/cmake/$project"
87
+ export TARGET_CMAKE_PREFIX_PATH=" ${TARGET_CMAKE_PREFIX_PATH} ;${INSTALL} /lib/cmake/$project "
88
+ }
89
+
90
+ append_dir_to_cmake () {
91
+ export TARGET_CMAKE_PREFIX_PATH=" ${TARGET_CMAKE_PREFIX_PATH} ;${1} "
92
+ }
93
+
94
+ append_to_cmake_args () {
95
+ export TARGET_CMAKE_ARGS=" ${TARGET_CMAKE_ARGS} ${1} "
96
+ }
97
+ host_cmake_build () {
98
+ project=$1
99
+ shift
100
+ src=$( cd $1 && pwd)
101
+ shift
102
+ build=$( host_build_dir $project )
103
+ echo -e " [Host]\t CMake build of ${project} with:"
104
+ echo " source: ${src} "
105
+ echo " build: ${build} "
106
+ mkdir -p " ${build} "
107
+ (
108
+ cd " ${build} "
109
+ set -x
110
+ if $SHOULD_CONFIGURE ; then
111
+ ${CMAKE} ${EXTRA_CMAKE_ARGS} \
112
+ -G " ${GENERATOR} " \
113
+ -DCMAKE_INSTALL_PREFIX=${HOST_INSTALL} \
114
+ -DCMAKE_PREFIX_PATH=${HOST_INSTALL} \
115
+ -DCMAKE_BUILD_TYPE=${CONFIG} \
116
+ " $@ " \
117
+ ${src}
118
+ fi
119
+ ${CMAKE} --build .
120
+ ${CMAKE} --build . --target install
121
+ set +x
122
+ )
123
+ }
124
+ target_ndk_build () {
125
+ project=$1
126
+ shift
127
+ src=$( cd $1 && pwd)
128
+ shift
129
+ build=$( target_build_dir ${project} )
130
+ echo -e " [Target]\t ndk-build of ${project} with:"
131
+ echo " source: ${src} "
132
+ echo " build: ${build} "
133
+ mkdir -p " ${build} "
134
+ (
135
+ set -x
136
+ ${ANDROID_NDK} /ndk-build \
137
+ APP_ABI=${ANDROID_ABI} \
138
+ " NDK_OUT=${build} " \
139
+ " NDK_APP_DST_DIR=${INSTALL} /lib" \
140
+ " $@ " -C ${src}
141
+ set +x
142
+ )
143
+ }
144
+
145
+ # ## Project Builds
146
+ unpack_opencv () {
147
+ mkdir -p ${BUILD} /OpenCV
148
+ cd ${BUILD} /OpenCV
149
+ wget --timestamping ${OPENCV_URL} && unzip ${OPENCV_FN} || echo " Already up to date."
150
+ }
151
+ build_osvr_json_to_c () {
152
+ if [ ! " ${OSVR_JSON_TO_C} " ]; then
153
+ host_cmake_build jsoncpp src/jsoncpp \
154
+ -DJSONCPP_WITH_CMAKE_PACKAGE=ON \
155
+ -DBUILD_SHARED_LIBS=OFF \
156
+ -DBUILD_STATIC_LIBS=ON \
157
+ -DJSONCPP_WITH_TESTS=OFF \
158
+ -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF
159
+ host_cmake_build osvr_json_to_c buildscripts/osvr_json_to_c \
160
+ -DOSVR_CORE_SOURCE_DIR=${ROOT} /src/OSVR-Core
161
+
162
+ export OSVR_JSON_TO_C=${HOST_INSTALL} /bin/osvr_json_to_c
163
+ fi
164
+ }
165
+
166
+ build_jsoncpp () {
167
+ target_cmake_build jsoncpp src/jsoncpp \
168
+ -DJSONCPP_WITH_CMAKE_PACKAGE=ON \
169
+ -DBUILD_SHARED_LIBS=ON \
170
+ -DBUILD_STATIC_LIBS=OFF \
171
+ -DJSONCPP_WITH_TESTS=OFF \
172
+ -DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF
173
+ append_project_config_to_cmake jsoncpp
174
+ }
175
+
176
+ build_libfunc () {
177
+ target_cmake_build libfunctionality src/libfunctionality \
178
+ -DBUILD_TESTING=OFF
179
+ append_project_config_to_cmake libfunctionality
180
+ }
181
+
182
+ build_libusb () {
183
+ target_ndk_build libusb src/libusb/android/jni
184
+ (
185
+ cd ${ROOT} /src/libusb
186
+ mkdir -p ${INSTALL} /include/libusb-1.0
187
+ cmake -E copy_if_different libusb/libusb.h ${INSTALL} /include/libusb-1.0/libusb.h
188
+ )
189
+ }
190
+
191
+ build_boost () {
192
+ STD_LIBS=llvm
193
+ (
194
+ project=boost
195
+ export LINKAGE=static
196
+ export LIB_LINKAGE=${LINKAGE}
197
+ build=$( target_build_dir ${project} )
198
+ mkdir -p ${build}
199
+ cd ${ROOT} /src
200
+ mkdir -p boost
201
+ cd boost
202
+ if [ ! -d ${INSTALL} /boost/${BOOST_VER} /libs/${ANDROID_ABI} /${STD_LIBS} ]; then
203
+ if [ ! -d ${BOOST_VER} ]; then
204
+ wget --timestamping ${BOOST_URL}
205
+ tar xjf ${BOOST_FN}
206
+ mv ${BOOST_FN% .tar.bz2} ${BOOST_VER}
207
+ fi
208
+
209
+
210
+ (
211
+ cd ${build}
212
+ rm -f boost_build.log
213
+ export ANDROID_NDK_ROOT=${ANDROID_NDK}
214
+ ${ROOT} /src/Boost-for-Android/build_tools/build-boost.sh \
215
+ --version=$BOOST_VER \
216
+ --stdlibs=$STD_LIBS \
217
+ --abis=$ANDROID_ABI \
218
+ --ndk-dir=$ANDROID_NDK \
219
+ --linkage=$LINKAGE \
220
+ --verbose \
221
+ --install_dir=$INSTALL \
222
+ --build-dir=$( pwd) /tmp \
223
+ ${ROOT} /src/boost 2>&1 | tee -a boost_build.log
224
+ )
225
+ fi
226
+ )
227
+ # export BOOST_CMAKE_ARGS="-DBoost_LIBRARY_DIR=${INSTALL}/boost/${BOOST_VER}/libs/${ANDROID_ABI}/${STD_LIBS} "
228
+
229
+ append_to_cmake_args -DBoost_LIBRARY_DIR=${INSTALL} /boost/${BOOST_VER} /libs/${ANDROID_ABI} /${STD_LIBS}
230
+ append_to_cmake_args -DBoost_INCLUDE_DIR=${INSTALL} /boost/${BOOST_VER} /include
231
+ append_to_cmake_args -DBoost_ADDITIONAL_VERSIONS=1.65.1
232
+ append_to_cmake_args -DBoost_USE_STATIC_LIBS=ON
233
+ # export TARGET_CMAKE_PREFIX_PATH="${TARGET_CMAKE_PREFIX_PATH}:${INSTALL}/boost/${BOOST_VER}/libs/${ANDROID_ABI}/${STD_LIBS}:${INSTALL}/boost/${BOOST_VER}/include"
234
+ append_dir_to_cmake ${INSTALL} /boost/${BOOST_VER} /libs/${ANDROID_ABI} /${STD_LIBS}
235
+ append_dir_to_cmake ${INSTALL} /boost/${BOOST_VER} /include
236
+ }
237
+
238
+ build_osvr_core () {
239
+ target_cmake_build OSVR-Core src/OSVR-Core \
240
+ " -DLIBUSB1_LIBRARY=${INSTALL} /lib/libusb1.0.so" \
241
+ " -DLIBUSB1_INCLUDE_DIR=${INSTALL} /include/libusb-1.0" \
242
+ -DOSVR_JSON_TO_C_EXECUTABLE=${OSVR_JSON_TO_C} \
243
+ -DBUILD_WITH_OPENCV=OFF \
244
+ -DBUILD_HEADER_DEPENDENCY_TESTS=OFF
245
+
246
+ rm -f ${INSTALL} /lib/cmake/osvr/osvrConfigInstalledOpenCV.cmake
247
+ # "-DVRPN_HIDAPI_SOURCE_ROOT=${ROOT}/src/hidapi" \
248
+ }
249
+
250
+ build_rendermanager () {
251
+ target_cmake_build OSVR-RenderManager src/OSVR-RenderManager \
252
+ " -DEIGEN3_INCLUDE_DIR:PATH=${ROOT} /src/OSVR-Core/vendor/eigen" \
253
+ " -DVRPN_INCLUDE_DIR:PATH=${ROOT} /src/OSVR-Core/vendor/vrpn" \
254
+ " -DVRPN_LIBRARY:PATH=$( target_build_dir OSVR-Core) /bin/libvrpnserver.a" \
255
+ " -DQUATLIB_INCLUDE_DIR:PATH=${ROOT} /src/OSVR-Core/vendor/vrpn/quat" \
256
+ " -DQUATLIB_LIBRARY:PATH=$( target_build_dir OSVR-Core) /bin/libquat.a" \
257
+ " -DCMAKE_CXX_FLAGS:STRING=-std=c++11"
258
+ }
259
+
260
+ (
261
+ cd $ROOT
262
+ # Host build
263
+
264
+ build_osvr_json_to_c
265
+
266
+ append_to_cmake_args " -DOSVR_JSON_TO_C_EXECUTABLE=${OSVR_JSON_TO_C} "
267
+
268
+ # Target build
269
+
270
+ # unpack_opencv
271
+ build_jsoncpp
272
+ build_libfunc
273
+ build_libusb
274
+ build_boost
275
+ build_osvr_core
276
+ cp $ANDROID_NDK /sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI} /libc++_shared.so ${INSTALL} /lib
277
+
278
+ build_rendermanager
279
+
280
+ target_cmake_build OSVR-Unity-Rendering src/OSVR-Unity-Rendering
281
+
282
+ target_cmake_build android_sensor_tracker src/android_sensor_tracker/com_osvr_android_sensorTracker
283
+ # target_cmake_build org_osvr_android_moverio src/android_sensor_tracker/org_osvr_android_moverio
284
+ target_cmake_build jniImaging src/android_sensor_tracker/com_osvr_android_jniImaging
285
+
286
+ for proj in src-extra/* ; do
287
+ echo $proj
288
+ if [ -d ${proj} -a -f ${proj} /CMakeLists.txt ]; then
289
+ target_cmake_build $( basename ${proj} ) ${proj}
290
+ fi
291
+ done
292
+
293
+ )
0 commit comments