Android build/soong/scripts/microfactory.bash源码分析

该文件export一个全局变量,提供了两个方法,执行了一个source导入命令。

export一个全局变量

复制代码
# Ensure GOROOT is set to the in-tree version.
# 确保 GOROOT 环境变量被设置为 Android 源代码树中的适当版本的 Go 运行时目录
# uname返回操作系统的名称
# 开始一个 case 语句,用于根据操作系统执行不同的命令。
case $(uname) in
    Linux)
        export GOROOT="${TOP}/prebuilts/go/linux-x86/"
        ;;
    Darwin)
        export GOROOT="${TOP}/prebuilts/go/darwin-x86/"
        ;;
    *) echo "unknown OS:" $(uname) >&2 && exit 1;;
# 结束一个case语句
esac

export 全局变量 GOROOT,作为Android源代码go语言运行时目录,即go源码的位置。

提供两个方法

1. getoutdir

getoutdir 确定 Android 构建系统的输出目录

复制代码
function getoutdir
{
    #尝试使用环境变量 OUT_DIR 的值对其进行初始化。如果 OUT_DIR 未设置,out_dir 将为空字符串
    local out_dir="${OUT_DIR-}"
    #-z 测试操作符用于检查字符串长度是否为零
    if [ -z "${out_dir}" ]; then
        #再次检查环境变量 OUT_DIR_COMMON_BASE 是否设置。如果设置了,使用它的值来构建输出目录的路径
        if [ "${OUT_DIR_COMMON_BASE-}" ]; then
            #如果 OUT_DIR_COMMON_BASE 被设置了,将 out_dir 设置为 OUT_DIR_COMMON_BASE 目录下,
            #加上 TOP 变量所指向的目录的基本名称(即 TOP 目录的名称)
            out_dir="${OUT_DIR_COMMON_BASE}/$(basename ${TOP})"
        else
            #如果没有指定 OUT_DIR 或 OUT_DIR_COMMON_BASE,则默认输出目录为 out
            out_dir="out"
        fi
    fi
    #如果 out_dir 不是绝对路径,将其设置为相对于 TOP 目录的路径
    if [[ "${out_dir}" != /* ]]; then
        out_dir="${TOP}/${out_dir}"
    fi
    #输出最终确定的输出目录路径
    echo "${out_dir}"
}

2. soong_build_go

用于将源码编译为二进制文件,有两个参数,第一个参数指定二进制文件的名称,第二个参数执行二进制文件编译所需的源码位置。

复制代码
# Bootstrap microfactory from source if necessary and use it to build the
# requested binary.
#
# Arguments:
#  $1: name of the requested binary
#  $2: package name
#它用于构建指定的 Go 语言编写的 Android 二进制文件。
#这个函数使用了 microfactory 工具来构建 Go 代码
function soong_build_go
{
    #调用 getoutdir 函数来确定构建输出目录
    BUILDDIR=$(getoutdir) \
      #Android 源代码树的顶部目录
      SRCDIR=${TOP} \
      #存放构建蓝图文件的目录
      BLUEPRINTDIR=${TOP}/build/blueprint \
      #构建额外参数 EXTRA_ARGS,用于指定 Go 包的路径。这里指定了两个包路径:android/soong 和
      #github.com/golang/protobuf,它们都指向 TOP 目录下的特定子目录
      EXTRA_ARGS="-pkg-path android/soong=${TOP}/build/soong -pkg-path github.com/golang/protobuf=${TOP}/external/golang-protobuf" \
      #调用 build_go 函数,并传递所有传入 soong_build_go 函数的参数($@ 表示所有参数)
      build_go $@
}

执行了一个source导入命令

复制代码
# 执行命令或导入函数变量
source ${TOP}/build/blueprint/microfactory/microfactory.bash

负责提供soong_build_go所需的build_go方法。

相关推荐
冷雨夜中漫步6 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
百锦再7 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
2501_916008898 小时前
全面介绍Fiddler、Wireshark、HttpWatch、SmartSniff和firebug抓包工具功能与使用
android·ios·小程序·https·uni-app·iphone·webview
m0_736919108 小时前
C++代码风格检查工具
开发语言·c++·算法
2501_944934739 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
玉梅小洋9 小时前
Windows 10 Android 构建配置指南
android·windows
黎雁·泠崖9 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_7634724610 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
Libraeking10 小时前
视觉篇:Canvas 自定义绘图与高级动画的华丽圆舞曲
android·经验分享·android jetpack
TechWJ10 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto