如何指定host参数以在Bazel中配置脚本?

时间:2019-06-27 22:05:24

标签: cross-compiling bazel arm64 envoyproxy gperftools

我正在尝试使用https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz上的Linaro工具链,针对aarch64变体在lubuntu 16.04 LTS上交叉编译特使(使用Bazel)

我为bazel编写了一个自定义工具链,但gperftools未能构建,并出现以下错误:

checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for git... /usr/bin/git
checking for style of include used by make... GNU
checking for gcc... /home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... configure error: in '/tmp/tmp.JdoXpg4e35'
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details

在我看来,主机系统类型应该是aarch64。

我想知道如何在bazel中为正在编译gperftools的configure脚本指定--host参数。我的工具链文件很可能是错误的,因为这是我第一次尝试编写文件。

我一直在尝试改编https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.html#setting-up-the-build-environment上的教程

我的顶级构建包含

build:cross --crosstool_top=//toolchain:aarch64
build:cross --cpu=aarch64
build:cross --host_crosstool_top=//toolchain:aarch64
build:cross --linkopt -fPIE

我的工具链目录包含一个BUILD文件,

package(default_visibility = ['//visibility:public'])
filegroup(name = "crossbuild")

cc_toolchain_suite(
    name = "aarch64",
    toolchains = {
        "aarch64": ":aarch64_toolchain",
        "k8": ":aarch64_toolchain",
    },
)

filegroup(name = "empty")

load(":cc_toolchain_config.bzl", "cc_toolchain_config")
cc_toolchain_config(name = "aarch64_toolchain_config")

cc_toolchain(
    name = "aarch64_toolchain",
    toolchain_identifier = "aarch64-toolchain",
    toolchain_config = ":aarch64_toolchain_config",
    all_files = ":empty",
    compiler_files = ":empty",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    supports_param_files = 0,
)

和一个名为cc_toolchain_config.bzl的文件,其中

load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "tool_path")

def _impl(ctx):
    tool_paths = [
        tool_path(
            name = "gcc",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-gcc",
        ),
        tool_path(
            name = "ld",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-ld",
        ),
        tool_path(
            name = "ar",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-ar",
        ),
        tool_path(
            name = "cpp",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-cpp",
        ),
        tool_path(
            name = "gcov",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-gcov",
        ),
        tool_path(
            name = "nm",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-nm",
        ),
        tool_path(
            name = "objdump",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-objdump",
        ),
        tool_path(
            name = "strip",
            path = "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/bin/aarch64-linux-gnu-strip",
        ),
    ]                   
    return cc_common.create_cc_toolchain_config_info(
        ctx = ctx,
        toolchain_identifier = "aarch64-toolchain",
        host_system_name = "x86_64-linux-gnu",
        target_system_name = "aarch64",
        target_cpu = "aarch64",
        target_libc = "unknown",
        compiler = "gcc-7.4.1",
        abi_version = "unknown",
        abi_libc_version = "unknown",
        tool_paths=tool_paths,
        cxx_builtin_include_directories=["/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/aarch64-linux-gnu/libc/usr/include/",
                                         "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/aarch64-linux-gnu/include/c++/7.4.1/",
                                         "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/aarch64-linux-gnu/include/c++/7.4.1/aarch64-linux-gnu/bits/",
                                         "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/aarch64-linux-gnu/libc/usr/include/",
                                         "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/lib/gcc/aarch64-linux-gnu/7.4.1/include/",
                                         "/home/user/Desktop/workspace/envoy/toolchain/aarch64-linux-gnu-gcc-7.4.1/lib/gcc/aarch64-linux-gnu/7.4.1/include-fixed/"],
    )

cc_toolchain_config = rule(
    implementation = _impl,
    attrs = {},
    provides = [CcToolchainConfigInfo],
)

我一直在使用此构建命令

bazel build --config=cross -c opt //source/exe:envoy-static.stripped --verbose_failures

0 个答案:

没有答案
相关问题