Skip to content

Commit 6b93726

Browse files
committed
Add dobuild.sh and osvr_json_to_c cmake
1 parent 9a89612 commit 6b93726

File tree

2 files changed

+339
-0
lines changed

2 files changed

+339
-0
lines changed

dobuild.sh

+293
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,293 @@
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+
)

osvr_json_to_c/CMakeLists.txt

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# A silly build file to build just the osvr_json_to_c tool out of an OSVR-Core source directory.
2+
cmake_minimum_required(VERSION 3.0)
3+
project(osvr_json_to_c)
4+
5+
###
6+
# Make sure we have OSVR-Core source
7+
###
8+
find_path(OSVR_CORE_SOURCE_DIR devtools/osvr_json_to_c.cpp)
9+
if(NOT OSVR_CORE_SOURCE_DIR OR NOT EXISTS "${OSVR_CORE_SOURCE_DIR}/devtools/osvr_json_to_c.cpp")
10+
message(FATAL_ERROR "Need OSVR_CORE_SOURCE_DIR set to the root of an OSVR-Core source tree!")
11+
endif()
12+
13+
###
14+
# Some setup from the main OSVR-Core build system
15+
###
16+
list(APPEND CMAKE_MODULE_PATH "${OSVR_CORE_SOURCE_DIR}/cmake" "${OSVR_CORE_SOURCE_DIR}/cmake-local" "${OSVR_CORE_SOURCE_DIR}")
17+
include(MapImportedReleaseVariants)
18+
include(MSVCMultipleProcessCompile)
19+
20+
include(SetDefaultBuildType)
21+
set_default_build_type(RelWithDebInfo)
22+
23+
include(CMakeBoostHelper)
24+
if(WIN32)
25+
option(Boost_USE_STATIC_LIBS "Build with Boost's static libraries?" ON)
26+
endif()
27+
28+
###
29+
# Deps
30+
###
31+
find_package(jsoncpp REQUIRED)
32+
if(TARGET jsoncpp_lib_static AND NOT TARGET jsoncpp_lib)
33+
add_library(jsoncpp_lib INTERFACE)
34+
target_link_libraries(jsoncpp_lib INTERFACE jsoncpp_lib_static)
35+
endif()
36+
find_package(Boost REQUIRED COMPONENTS program_options)
37+
38+
###
39+
# Build and install
40+
###
41+
add_executable(osvr_json_to_c "${OSVR_CORE_SOURCE_DIR}/devtools/osvr_json_to_c.cpp")
42+
43+
target_include_directories(osvr_json_to_c PRIVATE ${Boost_INCLUDE_DIRS})
44+
target_link_libraries(osvr_json_to_c jsoncpp_lib ${Boost_PROGRAM_OPTIONS_LIBRARIES})
45+
install(TARGETS osvr_json_to_c
46+
RUNTIME DESTINATION bin)

0 commit comments

Comments
 (0)