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