google-ai-edge / mediapipe

Cross-platform, customizable ML solutions for live and streaming media.
https://mediapipe.dev
Apache License 2.0
26.8k stars 5.09k forks source link

Cross-compile mediapipe for ARM64 on SemiDrive X9U platform #5625

Open Sirhxs opened 4 days ago

Sirhxs commented 4 days ago

OS Platform and Distribution

Ubuntu22.04

Compiler version

gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

Programming Language and version

C++17、Python 3.10.12

Installed using virtualenv? pip? Conda?(if python)

No response

MediaPipe version

v0.10.15

Bazel version

6.1.1

XCode and Tulsi versions (if iOS)

No response

Android SDK and NDK versions (if android)

No response

Android AAR (if android)

None

OpenCV version (if running on desktop)

4.7.0

Describe the problem

Hi,I try to Cross-compile mediapipe as a C++ library on Ubuntu22.04,and I got this problem:bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc: 1: ELF�@k@�4D@8: not found bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc: 9: Syntax error: "(" unexpected

Complete Logs

My build command is:
bazel build -c opt --crosstool_top=@crosstool//:toolchains --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=aarch64 --compiler=gcc --cxxopt=-std=c++17 \
--action_env=PYTHON_BIN_PATH="/usr/bin/python3" \
--host_javabase=@local_jdk//:jdk \
--copt=-fPIC \
--linkopt=-static-libgcc \
--linkopt=-static-libstdc++ \
--cxxopt="-D__STDC_CONSTANT_MACROS" \
--cxxopt="-D__STDC_FORMAT_MACROS" \
--cxxopt="-D__STDC_LIMIT_MACROS" \
--action_env CC_TOOLCHAIN_NAME=aarch64-linux-gnu \
--action_env GCC_HOST_COMPILER_PATH=/tool/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
--action_env GCC_HOST_COMPILER_PREFIX=aarch64-linux-gnu- \
--action_env CC=aarch64-linux-gnu-gcc \
--action_env CXX=aarch64-linux-gnu-g++ \
--action_env AR=aarch64-linux-gnu-ar \
--action_env STRIP=aarch64-linux-gnu-strip \
--sandbox_debug --verbose_failures \
//mediapipe/examples/desktop:libmediapipe_arm64.so

err log:
part 1:
ERROR: /home/hesir/work/open-source/mediapipe/mediapipe/framework/BUILD:111:24: ProtoCompile mediapipe/framework/mediapipe_options.pb.h failed: (Exit 2): linux-sandbox failed: error executing command 
  (cd /home/hesir/.cache/bazel/_bazel_hesir/d487168c49c78571add856c1a0ec6785/sandbox/linux-sandbox/1319/execroot/mediapipe && \
  exec env - \
    AR=aarch64-linux-gnu-ar \
    CC=aarch64-linux-gnu-gcc \
    CC_TOOLCHAIN_NAME=aarch64-linux-gnu \
    CXX=aarch64-linux-gnu-g++ \
    GCC_HOST_COMPILER_PATH=/tool/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
    GCC_HOST_COMPILER_PREFIX=aarch64-linux-gnu- \
    PATH=/home/hesir/.cache/bazelisk/downloads/sha256/651a20d85531325df406b38f38a1c2578c49d5e61128fba034f5b6abdb3d303f/bin:/usr/local/bin:/home/hesir/work/open-source/tools/protoc-27.3-linux-aarch_64/bin:/opt/android-sdk-linux/tools:/opt/android-sdk-linux/platform-tools:/home/hesir/.sdkman/candidates/java/current/bin:/home/hesir/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin:/tool/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin \
    PYTHON_BIN_PATH=/usr/bin/python3 \
    STRIP=aarch64-linux-gnu-strip \
    TMPDIR=/tmp \
  /home/hesir/.cache/bazel/_bazel_hesir/install/e63ada1a9406bff70c6efc9d97c3aeba/linux-sandbox -t 15 -w /home/hesir/.cache/bazel/_bazel_hesir/d487168c49c78571add856c1a0ec6785/sandbox/linux-sandbox/1319/execroot/mediapipe -w /tmp -w /dev/shm -S /home/hesir/.cache/bazel/_bazel_hesir/d487168c49c78571add856c1a0ec6785/sandbox/linux-sandbox/1319/stats.out -D -- bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc '--cpp_out=bazel-out/aarch64-opt/bin' -I. mediapipe/framework/mediapipe_options.proto)

part 2:
ERROR: /home/hesir/work/open-source/mediapipe/mediapipe/framework/formats/object_detection/BUILD:24:24: Generating Descriptor Set proto_library //mediapipe/framework/formats/object_detection:anchor_proto failed: (Exit 2): linux-sandbox failed: error executing command 
  (cd /home/hesir/.cache/bazel/_bazel_hesir/d487168c49c78571add856c1a0ec6785/sandbox/linux-sandbox/1320/execroot/mediapipe && \
  exec env - \
    AR=aarch64-linux-gnu-ar \
    CC=aarch64-linux-gnu-gcc \
    CC_TOOLCHAIN_NAME=aarch64-linux-gnu \
    CXX=aarch64-linux-gnu-g++ \
    GCC_HOST_COMPILER_PATH=/tool/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \
    GCC_HOST_COMPILER_PREFIX=aarch64-linux-gnu- \
    PATH=/home/hesir/.cache/bazelisk/downloads/sha256/651a20d85531325df406b38f38a1c2578c49d5e61128fba034f5b6abdb3d303f/bin:/usr/local/bin:/home/hesir/work/open-source/tools/protoc-27.3-linux-aarch_64/bin:/opt/android-sdk-linux/tools:/opt/android-sdk-linux/platform-tools:/home/hesir/.sdkman/candidates/java/current/bin:/home/hesir/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin:/tool/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin \
    PYTHON_BIN_PATH=/usr/bin/python3 \
    STRIP=aarch64-linux-gnu-strip \
    TMPDIR=/tmp \
  /home/hesir/.cache/bazel/_bazel_hesir/install/e63ada1a9406bff70c6efc9d97c3aeba/linux-sandbox -t 15 -w /home/hesir/.cache/bazel/_bazel_hesir/d487168c49c78571add856c1a0ec6785/sandbox/linux-sandbox/1320/execroot/mediapipe -w /tmp -w /dev/shm -S /home/hesir/.cache/bazel/_bazel_hesir/d487168c49c78571add856c1a0ec6785/sandbox/linux-sandbox/1320/stats.out -D -- bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc --direct_dependencies mediapipe/framework/formats/object_detection/anchor.proto '--direct_dependencies_violation_msg=%s is imported, but //mediapipe/framework/formats/object_detection:anchor_proto doesn'\''t directly depend on a proto_library that '\''srcs'\'' it.' '--descriptor_set_out=bazel-out/aarch64-opt/bin/mediapipe/framework/formats/object_detection/anchor_proto-descriptor-set.proto.bin' '-Imediapipe/framework/formats/object_detection/anchor.proto=mediapipe/framework/formats/object_detection/anchor.proto' mediapipe/framework/formats/object_detection/anchor.proto)

part 3:
bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc: 1: ELF�@k@�4D@8: not found
bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc: 9: Syntax error: "(" unexpected
1726284744.555571284: src/main/tools/linux-sandbox-pid1.cc:538: wait returned pid=2, status=0x200
1726284744.555598793: src/main/tools/linux-sandbox-pid1.cc:556: child exited normally with code 2
1726284744.559023275: src/main/tools/linux-sandbox.cc:233: child exited normally with code 2
Target //mediapipe/examples/desktop:libmediapipe_arm64.so failed to build
INFO: Elapsed time: 445.660s, Critical Path: 130.52s
INFO: 1794 processes: 483 internal, 1311 linux-sandbox.
FAILED: Build did NOT complete successfully
hesir@ubuntu2204:~/work/open-source/mediapipe$ file bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc
bazel-out/k8-opt-exec-50AE0418/bin/external/com_google_protobuf/protoc: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=5ab8da6c961216e9101c85fb0921d6d880c8929f, not stripped
Sirhxs commented 4 days ago

the only script I modify is: mediapipe/examples/desktop/BUILD I don't understand the syntax rules of Bazel, nor do I know how to configure it. The configuration I refer to is as follows: 4