在macOS上用Clang+Bazel构建C++时维持构建封闭性的问题
问题描述
我是Bazel新手,正在尝试用新的--platforms工具链机制替代旧的crosstool_top机制。官方文档主要讲新机制,所以得自己配置cc_toolchain_config。
我参考了一篇GCC教程,通过http_archive导入了Clang编译器包来实现封闭构建,尽可能完善了cc_toolchain_config的tool_paths和compile_flags配置。
编译时碰到错误:ld: library not found for -lSystem,查资料后在链接选项里加了路径/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib解决了问题,但这引入了本地路径,破坏了构建封闭性——我在Clang包没找到libSystem。试过用http_archive导入macOS SDK,但下载需要Apple账号权限。
系统信息:M1 Mac,Ventura 13.3.1;Bazel版本:6.2.1。
希望得到帮助:
- 如何维持构建封闭性,或有没有其他配置能避免添加这个本地链接参数
- 获取
cc_toolchain_config参数的相关资料
我的defs.bzl文件内容
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") def install_toolchain_clang(): http_archive( name = "clang", urls = ["https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.0/clang+llvm-16.0.0-arm64-apple-darwin22.0.tar.xz"], strip_prefix = "clang+llvm-16.0.0-arm64-apple-darwin22.0", sha256 = "2041587b90626a4a87f0de14a5842c14c6c3374f42c8ed12726ef017416409d9", build_file = "//toolchain_clang:clang.BUILD", ) native.register_toolchains( "@clang//:clang_toolchain", )
我的clang.BUILD文件内容
load("@bazel_tools//tools/cpp:unix_cc_toolchain_config.bzl", "cc_toolchain_config") cc_toolchain_config( name = "clang_cc_toolchain_config", cpu = "darwin", compiler = "clang", toolchain_identifier = "clang_toolchain", host_system_name = "local", target_system_name = "local", target_libc = "unknown", abi_version = "unknown", abi_libc_version = "unknown", tool_paths = { "gcc": "bin/clang", "g++": "bin/clang++", "cpp": "bin/false", "ar": "bin/llvm-ar", "nm": "bin/llvm-nm", "ld": "bin/lld", "objcopy": "bin/llvm-objcopy", "objdump": "bin/llvm-objdump", "gcov": "bin/llvm-profdata", "strip": "bin/false", "llvm-cov": "/bin/llvm-cov", }, compile_flags = [ "-isystem", "external/clang/include/c++/v1", ], link_flags = [ "-L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib", ] ) toolchain( name = "clang_toolchain", exec_compatible_with = [ "@platforms//os:macos", "@platforms//cpu:arm64",], target_compatible_with = [ "@platforms//os:macos", "@platforms//cpu:arm64", ], toolchain_type = "@rules_cc//cc:toolchain_type", toolchain = ":clang_cc_toolchain", ) filegroup( name = "all", srcs = glob(["**/*",]), ) cc_toolchain( name = "clang_cc_toolchain", all_files = ":all", ar_files = ":all", as_files = ":all", compiler_files = ":all", dwp_files = ":all", linker_files = ":all", objcopy_files = ":all", strip_files = ":all", dynamic_runtime_lib = ":all", static_runtime_lib = ":all", toolchain_config = ":clang_cc_toolchain_config", )
内容的提问来源于stack exchange,提问作者LonelyLodge
相关产品推荐
相关产品推荐

