1load("@bazel_skylib//rules/directory:directory.bzl", "directory") 2load("@bazel_skylib//rules/directory:subdirectory.bzl", "subdirectory") 3load("@rules_cc//cc/toolchains:tool.bzl", "cc_tool") 4load("@rules_cc//cc/toolchains:tool_map.bzl", "cc_tool_map") 5load("@rules_cc//cc/toolchains:args.bzl", "cc_args") 6load("@rules_cc//cc/toolchains:args_list.bzl", "cc_args_list") 7 8package(default_visibility = ["//visibility:public"]) 9 10licenses(["notice"]) 11 12# Directory-based rules in this toolchain only referece things in 13# lib/ or include/ subdirectories. 14directory( 15 name = "toolchain_root", 16 srcs = glob([ 17 "lib/**", 18 "include/**", 19 ]), 20) 21 22cc_tool_map( 23 name = "all_tools", 24 tools = { 25 "@rules_cc//cc/toolchains/actions:assembly_actions": ":asm", 26 "@rules_cc//cc/toolchains/actions:c_compile": ":clang", 27 "@rules_cc//cc/toolchains/actions:cpp_compile_actions": ":clang++", 28 "@rules_cc//cc/toolchains/actions:link_actions": ":lld", 29 "@rules_cc//cc/toolchains/actions:objcopy_embed_data": ":llvm-objcopy", 30 "@rules_cc//cc/toolchains/actions:strip": ":llvm-strip", 31 "@rules_cc//cc/toolchains/actions:ar_actions": ":llvm-ar", 32 }, 33) 34 35# TODO: https://github.com/bazelbuild/rules_cc/issues/235 - Workaround until 36# Bazel has a more robust way to implement `cc_tool_map`. 37alias( 38 name = "asm", 39 actual = ":clang", 40) 41 42cc_tool( 43 name = "clang", 44 src = select({ 45 "@platforms//os:windows": "//:bin/clang.exe", 46 "//conditions:default": "//:bin/clang", 47 }), 48 data = glob([ 49 "bin/llvm", 50 "lib/clang/*/include/**", 51 "include/armv*-unknown-none-eabi/**", 52 ]), 53) 54 55cc_tool( 56 name = "clang++", 57 src = select({ 58 "@platforms//os:windows": "//:bin/clang++.exe", 59 "//conditions:default": "//:bin/clang++", 60 }), 61 data = glob([ 62 "bin/llvm", 63 "lib/clang/*/include/**", 64 "include/armv*-unknown-none-eabi/**", 65 "include/c++/v1/**", 66 ]), 67) 68 69cc_tool( 70 name = "lld", 71 src = select({ 72 "@platforms//os:windows": "//:bin/clang++.exe", 73 "//conditions:default": "//:bin/clang++", 74 }), 75 data = glob([ 76 "bin/llvm", 77 "bin/lld*", 78 "bin/ld*", 79 "lib/**/*.a", 80 "lib/**/*.so*", 81 "lib/**/*.o", 82 "lib/armv*-unknown-none-eabi/**", 83 "lib/clang/*/lib/armv*-unknown-none-eabi/**", 84 ]), 85) 86 87cc_tool( 88 name = "llvm-ar", 89 src = select({ 90 "@platforms//os:windows": "//:bin/llvm-ar.exe", 91 "//conditions:default": "//:bin/llvm-ar", 92 }), 93 data = glob(["bin/llvm"]), 94) 95 96cc_tool( 97 name = "llvm-libtool-darwin", 98 src = select({ 99 "@platforms//os:windows": "//:bin/llvm-libtool-darwin.exe", 100 "//conditions:default": "//:bin/llvm-libtool-darwin", 101 }), 102 data = glob(["bin/llvm"]), 103) 104 105cc_tool( 106 name = "llvm-objcopy", 107 src = select({ 108 "@platforms//os:windows": "//:bin/llvm-objcopy.exe", 109 "//conditions:default": "//:bin/llvm-objcopy", 110 }), 111 data = glob(["bin/llvm"]), 112) 113 114cc_tool( 115 name = "llvm-objdump", 116 src = select({ 117 "@platforms//os:windows": "//:bin/llvm-objdump.exe", 118 "//conditions:default": "//:bin/llvm-objdump", 119 }), 120 data = glob(["bin/llvm"]), 121) 122 123cc_tool( 124 name = "llvm-cov", 125 src = select({ 126 "@platforms//os:windows": "//:bin/llvm-cov.exe", 127 "//conditions:default": "//:bin/llvm-cov", 128 }), 129 data = glob(["bin/llvm"]), 130) 131 132cc_tool( 133 name = "llvm-strip", 134 src = select({ 135 "@platforms//os:windows": "//:bin/llvm-strip.exe", 136 "//conditions:default": "//:bin/llvm-strip", 137 }), 138 data = glob(["bin/llvm"]), 139) 140 141cc_tool( 142 name = "clang-tidy", 143 src = select({ 144 "@platforms//os:windows": "//:bin/clang-tidy.exe", 145 "//conditions:default": "//:bin/clang-tidy", 146 }), 147 data = glob([ 148 "bin/llvm", 149 "include/**", 150 "lib/clang/**/include/**", 151 ]), 152) 153