LINUX 高通平台交叉编译tangram-es

  • 下载源码,参选:

https://blog.csdn.net/quantum7/article/details

  • 安装LINUX用编译工具

cmake, ninja

  • 交叉编译工具

假设放在/usr/local/x86

  • 编写aarch64-oe.cmake

    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR aarch64)

    高通OE交叉编译器前缀

    set(TOOLCHAIN_PREFIX "aarch64-oe-linux-")
    set(CMAKE_C_COMPILER {TOOLCHAIN_PREFIX}gcc) set(CMAKE_CXX_COMPILER {TOOLCHAIN_PREFIX}g++)
    set(CMAKE_AR {TOOLCHAIN_PREFIX}ar) set(CMAKE_RANLIB {TOOLCHAIN_PREFIX}ranlib)
    set(CMAKE_LIBRARY_ARCHIVER ${TOOLCHAIN_PREFIX}ar)

    Sysroot路径

    set(TOOLCHAIN_SYSROOT "/usr/local/x86-aarch64-toolchain/sysroots/aarch64-oe-linux")
    set(CMAKE_SYSROOT ${TOOLCHAIN_SYSROOT})

    交叉查找规则

    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

    编译flag适配高通AArch64

    set(CMAKE_C_FLAGS "-march=armv8-a -O2 -Os")
    set(CMAKE_CXX_FLAGS "-march=armv8-a -O2 -Os -include limits")

  • 编译脚本

    #!/bin/bash
    set -e

    SOURCE_ROOT_PATH=pwd

    TOOLCHAIN_PATH=/usr/local/x86-aarch64-toolchain
    CROSS_NAME=aarch64-oe-linux
    CROSS_BIN={TOOLCHAIN_PATH}/sysroots/x86_64-qtisdk-linux/usr/bin/{CROSS_NAME}
    export PATH={CROSS_BIN}:{PATH}

    . {TOOLCHAIN_PATH}/environment-setup-aarch64-oe-linux . {TOOLCHAIN_PATH}/environment-setup-aarch64-oe-linux-sdllvm

    配置全局变量

    TOOLCHAIN_FILE="{SOURCE_ROOT_PATH}/aarch64-oe.cmake" SYSROOT="{TOOLCHAIN_PATH}/sysroots/aarch64-oe-linux"

    PLATFORM_NAME=arm64
    INSTALL_DIR="HOME/tangram_{PLATFORM_NAME}install"
    BUILD_DIR="build
    ${PLATFORM_NAME}"

    make clean
    rm -rf CMakeCache.txt CMakeFiles
    rm -rf ${INSTALL_DIR}

    清理构建目录

    rm -rf BUILD_DIR mkdir -p BUILD_DIR
    cd $BUILD_DIR

    CMake 完整参数

    cmake ..
    -G Ninja
    -DCMAKE_TOOLCHAIN_FILE={TOOLCHAIN_FILE} \ -DCMAKE_INSTALL_PREFIX={INSTALL_DIR}
    -DCMAKE_FIND_ROOT_PATH=${SYSROOT}
    -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY
    -DCMAKE_BUILD_TYPE=Release
    -DRENDER_BACKEND=NONE
    -DTANGRAM_PLATFORM=NONE
    -DTANGRAM_ENABLE_3D=OFF
    -DTANGRAM_USE_EGL=OFF
    -DTANGRAM_USE_SDL=OFF
    -DTANGRAM_USE_QT=OFF
    -DTANGRAM_USE_GLFW=OFF
    -DTANGRAM_USE_METAL=OFF
    -DTANGRAM_MBTILES=ON
    -DBUILD_SHARED_LIBS=ON

    编译&安装

    ninja -j$(nproc)
    ninja install

  • 检查结果

    echo "编译完成,输出目录:{INSTALL_DIR}" ls -l {INSTALL_DIR}/lib

    file {SOURCE_ROOT_PATH}/{BUILD_DIR}/core/libtangram-core.so

  • 出错解决办法

scanscalar.cpp error: expected primary-expression before 'int' max = std::numeric_limits<int>::max()-CSDN博客

tangram-es/platforms/common/platform_gl.h:45:10: fatal error:GLFW/glfw3.h: No such file or directory-CSDN博客