运行Bazel构建时,如何通过wrenv.exe合理配置VxWorks环境
解决Bazel中通过wrenv.exe配置VxWorks构建环境的优雅方案
方案1:用Wrapper脚本封装wrenv调用
直接在tool_path里写带参数的wrenv命令行不通,因为Bazel期望tool_path指向单个可执行文件,而非带参数的命令链。可以写一个批处理脚本(Windows环境)封装wrenv的调用逻辑:
- 创建
ccarm_wrapper.bat脚本:
@echo off c:/path/to/wrenv.exe -p vxworks-6.9 ccarm %*
%*会把Bazel传递的所有参数转发给ccarm,保证编译参数正常生效。
- 在toolchain的
tool_path中指向这个脚本:
tool_path( name = "gcc", path = "c:/path/to/ccarm_wrapper.bat", )
这样Bazel调用gcc工具时,会自动执行脚本完成wrenv环境配置,再调用实际的ccarm编译器。
方案2:自定义Toolchain统一管理环境
如果需要更系统的控制VxWorks构建环境,可以自定义cc_toolchain,把wrapper脚本和环境配置整合到toolchain中:
- 在平台对应的toolchain BUILD文件中定义:
toolchain( name = "vxworks_69_arm7_toolchain", toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", toolchain = ":vxworks_cc_toolchain", target_compatible_with = [ "@platforms//cpu:arm", "@platforms//os:vxworks", ], ) cc_toolchain( name = "vxworks_cc_toolchain", all_files = ":compiler_wrappers", compiler_files = ":compiler_wrappers", toolchain_identifier = "vxworks_69_arm7", host_system_name = "windows", target_system_name = "vxworks_69_arm7", target_cpu = "arm", target_libc = "vxworks", compiler = "gcc", abi_version = "none", abi_libc_version = "none", # 根据需要补充其他cc_toolchain必填字段 ) filegroup( name = "compiler_wrappers", srcs = [ "ccarm_wrapper.bat", # 若需要其他工具(如ld、as),同理添加对应的wrapper脚本 ], )
- 在
.bazelrc中指定默认使用该toolchain:
build:vxworks --toolchain_resolution_debug build:vxworks --crosstool_top=@my_bazel//toolchains:vxworks_69_arm7_toolchain
之后构建时只需指定--config=vxworks即可,无需每次写长平台路径。
方案3:预初始化环境后启动Bazel
如果场景允许,也可以先通过wrenv初始化环境,再启动Bazel构建:
c:/path/to/wrenv.exe -p vxworks-6.9 -o env.bat call env.bat bazel build --platforms=@my_bazel//platforms::vxworks_69_arm7 //crypto:crypto
这种方式不需要修改Bazel配置,但缺点是环境配置和构建命令分离,不够集成化。
内容的提问来源于stack exchange,提问作者Eric Stoces
相关产品推荐
相关产品推荐

