buildCentral配置aarch64

发布时间 2023-05-24 10:04:15作者: 一条名叫西西的狗

一、测试环境

二、基础软件安装

三、aarch64环境配置

四、buildCentral环境配置

五、HelloWorld应用

一、测试环境

虚拟机版本:VirtualBox 7.0
系统版本:Ubuntu 18.04

 

二、基础软件安装

  1. 通用软件安装
    $sudo apt install git
    $sudo apt install openssh-server
    $sudo apt-get install python-networkx
    $sudo apt-get install python-simplejson
  2. 指定软件安装(我用的环境是项目环境,从Docker里面导出的环境,所以有些软件需要安装高版本)

    前往 CMake 官网(https://cmake.org/download/)下载最新版本的 cmake,我下载的是cmake-3.26.3.tar.gz

    l@l-VirtualBox:~/tools$ tar -xvzf cmake-3.26.3.tar.gz
    l@l-VirtualBox:~/tools$ cd cmake-3.26.3/
    l@l-VirtualBox:~/tools/cmake-3.26.3$ ./configure 
    l@l-VirtualBox:~/tools/cmake-3.26.3$ make
    l@l-VirtualBox:~/tools/cmake-3.26.3$ sudo make install

    前往 OpenSSL 官网(https://www.openssl.org/source/)下载最新版本的openssl,我下载的是openssl-3.1.0.tar.gz

    l@l-VirtualBox:~/tools$ tar -xvzf openssl-3.1.0.tar.gz 
    l@l-VirtualBox:~/tools$ cd openssl-3.1.0/
    l@l-VirtualBox:~/tools/openssl-3.1.0$ ./Configure 
    l@l-VirtualBox:~/tools/openssl-3.1.0$ make
    l@l-VirtualBox:~/tools/openssl-3.1.0$ sudo make install
  3. Docker环境安装(我用的环境是项目环境,从Docker里面导出的环境,所以需要安装Docker环境,非必须

    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/dists/bionic/pool/stable/amd64/  通过该网址下载:containerd.io_1.2.5-1_amd64.deb、docker-ce-cli_18.09.6~3-0~ubuntu-bionic_amd64.deb与docker-ce_18.09.6~3-0~ubuntu-bionic_amd64.deb

    l@l-VirtualBox:~/tools$ sudo dpkg -i containerd.io_1.2.5-1_amd64.deb
    l@l-VirtualBox:~/tools$ sudo dpkg -i docker-ce-cli_18.09.6~3-0~ubuntu-bionic_amd64.deb
    l@l-VirtualBox:~/tools$ sudo dpkg -i docker-ce_18.09.6~3-0~ubuntu-bionic_amd64.deb

    https://ubuntu.pkgs.org/18.04/ubuntu-main-amd64/libltdl7_2.4.6-2_amd64.deb.html 通过该网址下载:libltdl7_2.4.6-2_amd64.deb

    l@l-VirtualBox:~/tools$ sudo dpkg -i libltdl7_2.4.6-2_amd64.deb
  4. 如果,没有对应的Docker环境,可以通过网址下载aarch64压缩包(如果没有项目的Docker环境

    https://releases.linaro.org/components/toolchain/binaries/ 通过该网址,选择合适的aarch64版本,然后将其解压到/opt目录下,剩下的步骤与Docker导出后的操作一样。

三、aarch64环境配置

  1. 将aarch64环境导出到外部环境
    root@3415e46d856d:~# scp -r /opt/aarch64-linux/ l@<本机IP>:/home/l/workspace/
  2. 将环境拷贝到/opt目录
    l@l-VirtualBox:~/workspace$ sudo cp -r aarch64-linux/ /opt/

四、buildCentral环境配置

  1. 源码下载

    https://github.com/jeremyczhen/buildCentral 该网址,如果git clone https://github.com/jeremyczhen/buildCentral不行,请检查一下网络,如果还是不能下载,直接下载压缩包也可以。

    这个地方有个问题:如果代码是在windows下clone的,所有文件的编码都是dos。这种情况下,在Ubuntu下编译,会出现错误:

    mk: /bin/bash^M: bad interpreter: No such file or directory

    如要解决这个问题,需要做如下操作

    l@l-VirtualBox:~/buildCentral$ sudo apt-get install dos2unix
    l@l-VirtualBox:~/buildCentral$ find ./ -type f -exec dos2unix {} \;

    注意:命令中"\;"不是错误输入,是必须的

  2. 配置编译环境 -- 删除多余配置
    l@l-VirtualBox:~/buildCentral$ vim project/build/build_central.cfg

    打开该文件,找到并删除如下软件包,我们只是运行一个helloWorld,其它的软件都不需要

    > protobuf
    > fdbus
    > protobus
    > fdbus.example
    > pb.example
  3. 配置编译环境 -- 增加编译脚本
    l@l-VirtualBox:~/buildCentral$ vim build.sh 
    
    
    #!/bin/bash
    root_dir=$(pwd)
    application_dir=${root_dir}
    out_dir=${root_dir}/output/workspace
    
    function buildApp(){
            cd ${root_dir}
            cd $application_dir
            source /opt/aarch64-linux/environment-setup-aarch64-linux
            export PATH=${root_dir}/tools/buildCentral/install:$PATH
            export LD_LIBRARY_PATH=/opt/aarch64-linux/sysroots/aarch64-linux/lib64:$LD_LIBRARY_PATH
            mk -c
            mk -bcd
            cd ${root_dir}
    
    }
    
    buildApp
    
    
    l@l-VirtualBox:~/buildCentral$ chmod 77 build.sh 
  4. 配置编译环境 -- 配置aarch64编译器

    配置project路径之下的build_central.cfg 

    l@l-VirtualBox:~/buildCentral$ vim project/build/build_central.cfg 
        "DEFAULT_TARGET" : "aarch64-linux",
        "PACKAGES-PER-ARCH" : {
            ......
            "linux" : {
                ......
            },
            "aarch64-linux" : {
                "helloWorld" : {
                    "C_FLAGS" : "-Wno-error",
                    "CXX_FLAGS" : "-Wno-error -g -O0"
                }
            }
        },
        "BUILD_VARIANTS" : {
            .......
            "linux" : {
                ......
            },
            "aarch64-linux" : {
                "DEFAULT_VARIANT" : "default",
                "VARIANTS" : {
                    "default" : {
                        "MACRO" : "PLATFORM_HIGH_LOCAL",
                        "GROUPS" : ["aarch64-linux"]
                    }
                }
            }
        }
        "TARGETS" : {
            ......
            "linux" : {
               ......
            },
            "aarch64-linux" : {
                "DESCRIPTION" : "build for aarch64-linux"
            }
        },
        "GROUPS" : {
            ......
            "common-host" : {
                ......
            },
            "aarch64-linux" : {
                "PACKAGES" : [
                    "helloWorld"
                ]
            }
        },

    配置project路径之下的buildcentralrc

    l@l-VirtualBox:~/buildCentral$ vim project/build/buildcentralrc    
        
    { 
        ......
        "linux" : {
            ......
        },
        "aarch64-linux" : {
            "COMPILER_TYPE"     : "GNU",
            "TARGET_ARCH"       : "aarch64-linux-arm",
            "TARGET_OS"         : "LINUX",
            "C_FLAGS"           : "-fPIC -fms-extensions -Wno-write-strings -Wno-format-security -fno-short-enums -mlittle-endian -Wno-int-to-pointer-cast -Wno-format-truncation -Wno-int-in-bool-context -Wno-array-bounds -Wno-sign-compare -Wno-unused-variable -Wno-cpp -Wno-unused-function -Dlinux -Werror=return-type",
            "CXX_FLAGS"         : "-fPIC -fms-extensions -Wno-write-strings -Wno-format-security -fno-short-enums -mlittle-endian -Wno-int-to-pointer-cast -Wno-format-truncation -Wno-class-memaccess -Wno-int-in-bool-context -Wno-array-bounds -Wno-sign-compare -Wno-unused-variable -Wno-cpp -Wno-unused-function -Wno-format -Dlinux --std=gnu++11 -Wno-narrowing -frtti -fexceptions -Werror=return-type",
            "MACRO_DEF"         : {"__LINUX__" : null},
            "REL_FLAGS"         : "-O1",
            "DBG_FLAGS"         : "-g -O1",
            "SHA_LD_FLAGS"      : "-Wl,--hash-style=gnu",
            "EXE_LD_FLAGS"      : "-Wl,--hash-style=gnu",
            "LD_FLAGS"          : "-Wl,--hash-style=gnu",
            "OTHER_INC_PATH"    : [],
            "OTHER_LIB_PATH"    : [],
            "ENV_VAR" :         {}
        }
    }

     

五、HelloWorld应用

  1. 创建HelloWorld文件
    l@l-VirtualBox:~/buildCentral$ cd workspace/
    l@l-VirtualBox:~/buildCentral/workspace$ mkdir helloWorld
    l@l-VirtualBox:~/buildCentral/workspace$ cd helloWorld/
    l@l-VirtualBox:~/buildCentral/workspace/helloWorld$ vim main.c
    
    #include <stdio.h>
    
    int main(int argc, char ** argvv) {
        printf("Hello, World!\r\n");
        return 0;
    }
  2. 创建CMakeLists.txt,用于编译
    l@l-VirtualBox:~/buildCentral/workspace/helloWorld$ vim CMakeLists.txt 
    
    cmake_minimum_required(VERSION 2.8.4)
    
    project(helloWorld)
    set(BUILD_TYPE "static")
    
    ##########################################################################
    #                  Include buildCentral common rules                     #
    ##########################################################################
    include(${RULE_DIR}/rule_base.cmake)
    
    ##########################################################################
    #                Build rules for executable and library                  #
    # To build executable using:                                             #
    #   add_executable(executable_name, source_file, source_file, ...)       #
    # To build static library using:                                         # 
    #   add_library(library_name STATIC source_file, source_file, ...)       #
    # To build shared library using:                                         # 
    #   add_library(library_name SHARED source_file, source_file, ...)       #  
    ##########################################################################
    set(LIB_BUILD_TYPE "SHARED")
    set(LIB_INSTALL_TYPE "LIBRARY")
    
    IF(${TARGET_ARCH} MATCHES "arm")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -w -fpermissive  -Warray-bounds  -Werror")
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -w  -Warray-bounds  -Werror")
    ENDIF()
    
    file(GLOB PRJ_SRC_LIST *.c)
    add_executable(${PROJECT_NAME} ${PRJ_SRC_LIST})
    install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION workspace/)

    其中,变量CMAKE_CXX_FLAGS、CMAKE_C_FLAGS,都是aarch64-linux目录下的环境变量所设置。

将编译生成的helloWorld,push主板,经测试,可以正常输出。