如何 运行 buildroot 包中的外部构建脚本

How to run external build script in buildroot package

在 buildroot 中,我创建了一个从 github 获取工具的包。然而,这个工具是使用 buildroot 构建的,而不是从 buildroot 中构建的,所以关于如何使用 buildroot 构建它的典型流程是这样的:

cd github/tool
export BUILDROOT_TOPDIR=$HOME/buildroot
source tool_setup.sh 
tool_install_dependencies #Fetches more github dependencies based on git tags defined inside the setenv.sh, and builds them using buildroot
tool_build #Builds the tool and links dependencies

然而,在包文件中这样做是行不通的,因为来自 tool_setup.sh 的别名和 git 标签不是来源,示例包

TOOL_VERSION_VERSION = main
TOOL_VERSION_SITE = git@github.com:tool.git
TOOL_VERSION_SITE_METHOD = git
TOOL_VERSION_INSTALL_TARGET = YES


define TOOL_VERSION_BUILD_CMDS
    cd github/tool
    export BUILDROOT_TOPDIR=$(PWD)
    source tool_setup.sh 
    tool_install_dependencies
    tool_build
endef

define TOOL_VERSION_INSTALL_TARGET_CMDS
    $(INSTALL) -D -m 0755 $(@D)/output/tool $(TARGET_DIR)/sbin/
endef

$(eval $(generic-package))

将因 /bin/bash: tool_install_dependencies: command not found 而失败,使用 cmake-package 将失败,因为 CMakelists.txt 无法找到包含依赖项的 git 标签的变量。

我认为您的理解有误。我宁愿建议看看 tool_install_dependencies 和 tool_build 在你的 tools_setup.sh 脚本中做了什么,并在 Buildroot 包中复制它。

根据其名称,tool_install_dependencies 特别可怕,因为您绝对不希望 Buildroot 包自行安装依赖项。

除此之外,直接回答您的问题:与所有 Makefile 一样,您的规则的每一行都在单独的 shell 中执行,因此您的“来源 tool_setup.sh”运行s 在与“tool_install_dependencies”分开的 shell 中,这解释了为什么它不起作用。如果您希望它们在同一个 shell 中 运行,请执行“source tool_setup.sh; tool_install_dependencies; tool_build”。

但是,这又是一件非常、非常、非常、非常糟糕的事情。