• 下载源码,参选:

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博客

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐