|
| 1 | +#!/bin/bash |
| 2 | +CODE_DIR=$(cd $(dirname "${BASH_SOURCE[0]}");pwd) |
| 3 | +export NDK_ROOT=/data/ndk/android-ndk-r25b |
| 4 | +export USER_ROOT=/data/devel/thirdparty/deb |
| 5 | +export LIBRARY_RUNPATH=/data/user/0/com.mbox_ai/files/lib |
| 6 | +export MINDSPORE_LITE_PATH=/data/mindspore/mindspore-lite-1.9.0 |
| 7 | +export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 |
| 8 | +export JRE_HOME=${JAVA_HOME}/jre |
| 9 | +export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib |
| 10 | +export PATH=${JAVA_HOME}/bin:$PATH |
| 11 | + |
| 12 | +compile() { |
| 13 | + rm -f /data/data /data/mindspore/mindspore-lite-1.9.0 |
| 14 | + if [ "$1" == "a64" ];then |
| 15 | + export BUILD_DIR=build_a64 |
| 16 | + export ANDROID_ABI=arm64-v8a |
| 17 | + export ARCH=aarch64 |
| 18 | + ln -s mindspore-lite-1.9.0-android-aarch64 /data/mindspore/mindspore-lite-1.9.0 |
| 19 | + elif [ "$1" == "x64" ];then |
| 20 | + export BUILD_DIR=build_x64 |
| 21 | + export ANDROID_ABI=x86_64 |
| 22 | + export ARCH=x86_64 |
| 23 | + ln -s mindspore-lite-1.9.0-linux-x64 /data/mindspore/mindspore-lite-1.9.0 |
| 24 | + fi |
| 25 | + ln -s /data/devel/thirdparty/deb/${ANDROID_ABI}/data/data /data/data |
| 26 | + |
| 27 | + ls -lh /data/data |
| 28 | + ls -lh /data/mindspore/mindspore-lite-1.9.0 |
| 29 | + |
| 30 | + if [ -d ${CODE_DIR}/${BUILD_DIR} ];then |
| 31 | + rm -rf ${CODE_DIR}/${BUILD_DIR}/* |
| 32 | + else |
| 33 | + mkdir -p ${CODE_DIR}/${BUILD_DIR} |
| 34 | + fi |
| 35 | + |
| 36 | + cd ${CODE_DIR}/${BUILD_DIR} |
| 37 | + cmake .. \ |
| 38 | + -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ |
| 39 | + -DCMAKE_BUILD_TYPE=Release \ |
| 40 | + -DCMAKE_ANDROID_API=28 \ |
| 41 | + -DLOCAL_PACKAGE_PATH=/data/devel/thirdparty/src \ |
| 42 | + -DCLANG_TIDY=OFF \ |
| 43 | + -DCLANG_TIDY_AS_ERROR=OFF \ |
| 44 | + -DWITH_MINDSPORE=on \ |
| 45 | + -DWITH_JAVA=ON \ |
| 46 | + -DTEST_WORKING_DIR=/data/user/test \ |
| 47 | + -DPYTHON_VERSION_ANDROID=3.10 \ |
| 48 | + -DANDROID_ABI=${ANDROID_ABI} \ |
| 49 | + -DANDROID_PLATFORM=android-28 \ |
| 50 | + -DANDROID_NDK=${NDK_ROOT} \ |
| 51 | + -DANDROID_TOOLCHAIN=clang \ |
| 52 | + -DANDROID_STL=c++_shared \ |
| 53 | + -DANDROID_ALLOW_UNDEFINED_SYMBOLS=TRUE \ |
| 54 | + -DBUILD_SHARED_LIBS=1 \ |
| 55 | + -Wno-deprecated \ |
| 56 | + -Wno-dev |
| 57 | + |
| 58 | + if [ $? -ne 0 ];then |
| 59 | + echo "cmake failed" |
| 60 | + cat CMakeFiles/CMakeError.log |
| 61 | + exit 1 |
| 62 | + fi |
| 63 | + |
| 64 | + make package -j8 |
| 65 | +} |
| 66 | + |
| 67 | +prepare(){ |
| 68 | + cd ${CODE_DIR}/${BUILD_DIR} |
| 69 | + mkdir -p ${ANDROID_ABI}/jni/${ANDROID_ABI} |
| 70 | + mkdir -p ${ANDROID_ABI}/{libmodelbox-kernel,libmodelbox-drivers,assets} |
| 71 | + |
| 72 | + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/java/packages/lib/libmodelbox-jni.so ${ANDROID_ABI}/jni/${ANDROID_ABI}/ |
| 73 | + |
| 74 | + ls -lh cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/ |
| 75 | + |
| 76 | + cp /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/{libssl.so.1.1,libcrypto.so.1.1} ${ANDROID_ABI}/libmodelbox-kernel/ |
| 77 | + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmodelbox.so,libsecurec.so} ${ANDROID_ABI}/libmodelbox-kernel/ |
| 78 | + cp /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/${ARCH}-linux-android/libc++_shared.so ${ANDROID_ABI}/libmodelbox-kernel/ |
| 79 | + |
| 80 | + cp /data/mindspore/mindspore-lite-1.9.0/runtime/lib/libmindspore-lite.so ${ANDROID_ABI}/libmodelbox-drivers/ |
| 81 | + cp /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/{libpython3.10.so.1.0,libcgraph.so,libcdt.so,libz.so} ${ANDROID_ABI}/libmodelbox-drivers/ |
| 82 | + cp /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/{libandroid-support.so,libjpeg.so,liblzma.so,libopenblas.so,libopenjp2.so,libpng16.so,libprotobuf.so,libtiff.so,libwebp.so,libzstd.so,libopencv*.so} ${ANDROID_ABI}/libmodelbox-drivers/ |
| 83 | + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmbox-engine-mindspore-lite.so,libmodelbox-device-cpu.so,libmodelbox-graphconf-graphviz.so,libmodelbox-unit-cpu-mindspore-lite-inference.so,libmodelbox-unit-cpu-python.so,libmodelbox-virtualdriver-inference.so,libmodelbox-virtualdriver-python.so} ${ANDROID_ABI}/libmodelbox-drivers/ |
| 84 | + |
| 85 | + cd ${ANDROID_ABI}/libmodelbox-drivers |
| 86 | + find . -name "lib*" | xargs patchelf --set-rpath /data/user/0/com.mbox_ai/files/lib |
| 87 | + zip -r ../assets/libmodelbox-drivers_${ANDROID_ABI}.zip ./ |
| 88 | + md5sum ../assets/libmodelbox-drivers_${ANDROID_ABI}.zip > ../assets/libmodelbox-drivers_${ANDROID_ABI}.zip.md5 |
| 89 | + |
| 90 | + cd ../libmodelbox-kernel |
| 91 | + patchelf --set-rpath /data/user/0/com.mbox_ai/files/lib libssl.so.1.1 |
| 92 | + zip -r ../assets/libmodelbox-kernel_${ANDROID_ABI}.zip ./ |
| 93 | + md5sum ../assets/libmodelbox-kernel_${ANDROID_ABI}.zip > ../assets/libmodelbox-kernel_${ANDROID_ABI}.zip.md5 |
| 94 | + |
| 95 | + cd .. |
| 96 | + cp -r /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/python3.10 . |
| 97 | + cp -r python3.10/site-packages/numpy-1.23.3-py3.10-linux-${ARCH}.egg/numpy python3.10/site-packages/ |
| 98 | + rm -rf python3.10/site-packages/numpy-1.23.3-py3.10-linux-${ARCH}.egg |
| 99 | + cp -r /data/devel/thirdparty/deb/${ANDROID_ABI}/data/data/com.termux/files/usr/lib/python3.10/site-packages/cv2 python3.10/site-packages/ |
| 100 | + |
| 101 | + cd python3.10 |
| 102 | + find . -name "*.so" | xargs patchelf --set-rpath /data/user/0/com.mbox_ai/files/lib |
| 103 | + |
| 104 | + cd .. |
| 105 | + zip -r assets/python3.10_${ANDROID_ABI}.zip python3.10 |
| 106 | + md5sum assets/python3.10_${ANDROID_ABI}.zip > assets/python3.10_${ANDROID_ABI}.zip.md5 |
| 107 | + |
| 108 | + rm -rf libmodelbox-drivers libmodelbox-kernel python3.10 |
| 109 | + |
| 110 | + ls -lh ${CODE_DIR}/${BUILD_DIR}/${ANDROID_ABI}/* |
| 111 | +} |
| 112 | + |
| 113 | +package(){ |
| 114 | + mkdir ${CODE_DIR}/aar_pkg |
| 115 | + cat << 'EOF'>${CODE_DIR}/aar_pkg/AndroidManifest.xml |
| 116 | +<?xml version="1.0" encoding="utf-8"?> |
| 117 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
| 118 | + package="com.modelbox" |
| 119 | + android:versionCode="1"> |
| 120 | +
|
| 121 | + <uses-sdk |
| 122 | + android:minSdkVersion="28" |
| 123 | + android:targetSdkVersion="30"/> |
| 124 | +
|
| 125 | +</manifest> |
| 126 | +EOF |
| 127 | + |
| 128 | + cp ${CODE_DIR}/build_a64/src/java/modelbox-1.0.0.jar ${CODE_DIR}/aar_pkg/classes.jar |
| 129 | + cp -af ${CODE_DIR}/build_x64/x86_64/* ${CODE_DIR}/aar_pkg/ |
| 130 | + cp -af ${CODE_DIR}/build_a64/arm64-v8a/* ${CODE_DIR}/aar_pkg/ |
| 131 | + chown -R root.root ${CODE_DIR}/aar_pkg |
| 132 | + find ${CODE_DIR}/aar_pkg -type d|xargs chmod -R 755 |
| 133 | + find ${CODE_DIR}/aar_pkg -type f|xargs chmod -R 644 |
| 134 | + cd ${CODE_DIR}/aar_pkg |
| 135 | + jar -cvf modelbox.aar -C ${CODE_DIR}/aar_pkg . |
| 136 | +} |
| 137 | + |
| 138 | +buildtest(){ |
| 139 | + cd ${CODE_DIR}/build_x64 |
| 140 | + make unit -j8 |
| 141 | + mkdir -p /data/user/test/{dep,drivers} |
| 142 | + cp lib/{libgmock.so,libgtest.so} /data/user/test/dep/ |
| 143 | + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmodelbox.so,libsecurec.so,libmanager-client.so} /data/user/test/dep/ |
| 144 | + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmodelbox-unit-cpu-python.so,libmodelbox-device-cpu.so,libmodelbox-virtualdriver-python.so,libmodelbox-virtualdriver-inference.so,libmodelbox-graphconf-graphviz.so} /data/user/test/drivers/ |
| 145 | + cp test/mock/minimodelbox/libflowmock-lib.so /data/user/test/dep/ |
| 146 | + cp test/mock/drivers/libmock-driver-ctrl-lib.so /data/user/test/dep/ |
| 147 | + cp test/mock/drivers/device_mockdevice/libmodelbox-device-mockdevice.so /data/user/test/dep/ |
| 148 | + cp test/mock/drivers/flowunit_mockflowunit/libmodelbox-unit-mockdevice-mockflowunit.so /data/user/test/dep/ |
| 149 | + cp test/mock/drivers/graph_conf_mockgraphconf/libmodelbox-graphconf-mockgraphconf.so /data/user/test/dep/ |
| 150 | + cp test/unit/unit /data/user/test/bin/ |
| 151 | + cp /data/devel/thirdparty/deb/x86_64/usr/lib/{libssl.so.1.1,libcrypto.so.1.1,libcgraph.so,libcdt.so,libpython3.10.so.1.0} /data/user/test/dep/ |
| 152 | + cp /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so /data/user/test/dep/ |
| 153 | + cp -r ../test/assets /data/user/test/ |
| 154 | + cp -r /data/devel/thirdparty/deb/x86_64/usr/lib/python3.10 /data/user/test/ |
| 155 | + cp ../docker/unit.sh /data/user/test/bin/ |
| 156 | + chmod +x /data/user/test/bin/* |
| 157 | + cd /data/user/ |
| 158 | + tar zcf unittest.tar.gz test |
| 159 | + cp unittest.tar.gz /data/devel/modelbox |
| 160 | +} |
| 161 | + |
| 162 | +unittest(){ |
| 163 | + apt update |
| 164 | + apt install -y linux-modules-extra-$(uname -r) waydroid dbus dbus-x11 #weston |
| 165 | + |
| 166 | + if [ $(ls /usr/share/waydroid-extra/images|grep img|wc -l) -eq 2 ];then |
| 167 | + waydroid init -f -i /usr/share/waydroid-extra/images |
| 168 | + else |
| 169 | + waydroid init |
| 170 | + fi |
| 171 | + |
| 172 | + mkdir -p /tmp/runtime/wayland-0 |
| 173 | + chmod 700 /tmp/runtime |
| 174 | + /etc/init.d/dbus start |
| 175 | + eval $(dbus-launch --sh-syntax) |
| 176 | + export $(dbus-launch) |
| 177 | + #/usr/lib/waydroid/data/scripts/waydroid-net.sh start |
| 178 | + waydroid container start & |
| 179 | + waydroid session start & |
| 180 | + |
| 181 | + mkdir -p ~/.local/share/waydroid/data/user |
| 182 | + ls -lh /data/devel/modelbox/unittest.tar.gz |
| 183 | + tar zxf /data/devel/modelbox/unittest.tar.gz -C ~/.local/share/waydroid/data/user/ |
| 184 | + ls -lh ~/.local/share/waydroid/data/user/test |
| 185 | + waydroid shell ./data/user/test/bin/unit.sh | tee unittest.log |
| 186 | + |
| 187 | + times=0 |
| 188 | + while [ $(cat unittest.log|grep -c AesEncryptPass) -lt 1 ];do |
| 189 | + cat /var/lib/waydroid/waydroid.log |
| 190 | + if [ $(cat /var/lib/waydroid/waydroid.log|grep -c "waiting for session to load") -lt 1 ];then |
| 191 | + waydroid session start & |
| 192 | + fi |
| 193 | + waydroid container restart & |
| 194 | + waydroid shell ./data/user/test/bin/unit.sh | tee unittest.log |
| 195 | + times=$[${times}+1] |
| 196 | + if [ ${times} -gt 3 ]; then |
| 197 | + echo "waydroid container start failed,pls check" |
| 198 | + exit 1 |
| 199 | + fi |
| 200 | + done |
| 201 | +} |
| 202 | + |
| 203 | +main(){ |
| 204 | + if [ "$1" == "x64" ];then |
| 205 | + compile x64 |
| 206 | + elif [ "$1" == "a64" ];then |
| 207 | + compile a64 |
| 208 | + elif [ "$1" == "buildtest" ];then |
| 209 | + buildtest |
| 210 | + elif [ "$1" == "unittest" ];then |
| 211 | + unittest |
| 212 | + else |
| 213 | + for arch in x64 a64;do |
| 214 | + compile $arch |
| 215 | + prepare |
| 216 | + done |
| 217 | + package |
| 218 | + fi |
| 219 | +} |
| 220 | + |
| 221 | +main $@ |
0 commit comments