xref: /aosp_15_r20/external/pigweed/pw_toolchain/rust/templates.bzl (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2024 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker"""Private templates for generating toolchain repos."""
15*61c4878aSAndroid Build Coastguard Worker
16*61c4878aSAndroid Build Coastguard Worker_rust_toolchain_template = """\
17*61c4878aSAndroid Build Coastguard Workerrust_toolchain(
18*61c4878aSAndroid Build Coastguard Worker    name = "{name}_rust_toolchain",
19*61c4878aSAndroid Build Coastguard Worker    binary_ext = "",
20*61c4878aSAndroid Build Coastguard Worker    clippy_driver = "{toolchain_repo}//:bin/clippy-driver",
21*61c4878aSAndroid Build Coastguard Worker    default_edition = "2021",
22*61c4878aSAndroid Build Coastguard Worker    dylib_ext = "{dylib_ext}",
23*61c4878aSAndroid Build Coastguard Worker    exec_compatible_with = {exec_compatible_with},
24*61c4878aSAndroid Build Coastguard Worker    exec_triple = "{exec_triple}",
25*61c4878aSAndroid Build Coastguard Worker    rust_doc = "{toolchain_repo}//:bin/rustdoc",
26*61c4878aSAndroid Build Coastguard Worker    rust_std = "{target_repo}//:rust_std",
27*61c4878aSAndroid Build Coastguard Worker    rustc = "{toolchain_repo}//:bin/rustc",
28*61c4878aSAndroid Build Coastguard Worker    rustc_lib = "{toolchain_repo}//:rustc_lib",
29*61c4878aSAndroid Build Coastguard Worker    staticlib_ext = ".a",
30*61c4878aSAndroid Build Coastguard Worker    stdlib_linkflags = [],
31*61c4878aSAndroid Build Coastguard Worker    target_compatible_with = {target_compatible_with},
32*61c4878aSAndroid Build Coastguard Worker    target_triple = "{target_triple}",
33*61c4878aSAndroid Build Coastguard Worker    extra_rustc_flags = {extra_rustc_flags},
34*61c4878aSAndroid Build Coastguard Worker    extra_exec_rustc_flags = {extra_rustc_flags},
35*61c4878aSAndroid Build Coastguard Worker    # TODO: https://pwbug.dev/342695883 - Works around confusing
36*61c4878aSAndroid Build Coastguard Worker    # target_compatible_with semantics in rust_toolchain. Figure out how to
37*61c4878aSAndroid Build Coastguard Worker    # do better.
38*61c4878aSAndroid Build Coastguard Worker    tags = ["manual"],
39*61c4878aSAndroid Build Coastguard Worker)
40*61c4878aSAndroid Build Coastguard Worker"""
41*61c4878aSAndroid Build Coastguard Worker
42*61c4878aSAndroid Build Coastguard Workerdef rust_toolchain_template(
43*61c4878aSAndroid Build Coastguard Worker        name,
44*61c4878aSAndroid Build Coastguard Worker        exec_triple,
45*61c4878aSAndroid Build Coastguard Worker        target_triple,
46*61c4878aSAndroid Build Coastguard Worker        toolchain_repo,
47*61c4878aSAndroid Build Coastguard Worker        target_repo,
48*61c4878aSAndroid Build Coastguard Worker        dylib_ext,
49*61c4878aSAndroid Build Coastguard Worker        exec_compatible_with,
50*61c4878aSAndroid Build Coastguard Worker        target_compatible_with,
51*61c4878aSAndroid Build Coastguard Worker        extra_rustc_flags):
52*61c4878aSAndroid Build Coastguard Worker    return _rust_toolchain_template.format(
53*61c4878aSAndroid Build Coastguard Worker        name = name,
54*61c4878aSAndroid Build Coastguard Worker        exec_triple = exec_triple,
55*61c4878aSAndroid Build Coastguard Worker        target_triple = target_triple,
56*61c4878aSAndroid Build Coastguard Worker        toolchain_repo = toolchain_repo,
57*61c4878aSAndroid Build Coastguard Worker        target_repo = target_repo,
58*61c4878aSAndroid Build Coastguard Worker        dylib_ext = dylib_ext,
59*61c4878aSAndroid Build Coastguard Worker        exec_compatible_with = json.encode(exec_compatible_with),
60*61c4878aSAndroid Build Coastguard Worker        target_compatible_with = json.encode(target_compatible_with),
61*61c4878aSAndroid Build Coastguard Worker        extra_rustc_flags = json.encode(extra_rustc_flags),
62*61c4878aSAndroid Build Coastguard Worker    )
63*61c4878aSAndroid Build Coastguard Worker
64*61c4878aSAndroid Build Coastguard Worker_toolchain_template = """\
65*61c4878aSAndroid Build Coastguard Workertoolchain(
66*61c4878aSAndroid Build Coastguard Worker        name = "{name}",
67*61c4878aSAndroid Build Coastguard Worker        exec_compatible_with = {exec_compatible_with},
68*61c4878aSAndroid Build Coastguard Worker        target_compatible_with = {target_compatible_with},
69*61c4878aSAndroid Build Coastguard Worker        target_settings = {target_settings},
70*61c4878aSAndroid Build Coastguard Worker        toolchain = ":{name}_rust_toolchain",
71*61c4878aSAndroid Build Coastguard Worker        toolchain_type = "@rules_rust//rust:toolchain",
72*61c4878aSAndroid Build Coastguard Worker    )
73*61c4878aSAndroid Build Coastguard Worker"""
74*61c4878aSAndroid Build Coastguard Worker
75*61c4878aSAndroid Build Coastguard Workerdef toolchain_template(
76*61c4878aSAndroid Build Coastguard Worker        name,
77*61c4878aSAndroid Build Coastguard Worker        exec_compatible_with,
78*61c4878aSAndroid Build Coastguard Worker        target_compatible_with,
79*61c4878aSAndroid Build Coastguard Worker        target_settings):
80*61c4878aSAndroid Build Coastguard Worker    return _toolchain_template.format(
81*61c4878aSAndroid Build Coastguard Worker        name = name,
82*61c4878aSAndroid Build Coastguard Worker        exec_compatible_with = json.encode(exec_compatible_with),
83*61c4878aSAndroid Build Coastguard Worker        target_compatible_with = json.encode(target_compatible_with),
84*61c4878aSAndroid Build Coastguard Worker        target_settings = json.encode(target_settings),
85*61c4878aSAndroid Build Coastguard Worker    )
86*61c4878aSAndroid Build Coastguard Worker
87*61c4878aSAndroid Build Coastguard Worker_rust_analyzer_toolchain_template = """\
88*61c4878aSAndroid Build Coastguard Workerrust_analyzer_toolchain(
89*61c4878aSAndroid Build Coastguard Worker    name = "{name}_rust_analyzer_toolchain",
90*61c4878aSAndroid Build Coastguard Worker    exec_compatible_with = {exec_compatible_with},
91*61c4878aSAndroid Build Coastguard Worker    proc_macro_srv = "{toolchain_repo}//:libexec/rust-analyzer-proc-macro-srv",
92*61c4878aSAndroid Build Coastguard Worker    rustc = "{toolchain_repo}//:bin/rustc",
93*61c4878aSAndroid Build Coastguard Worker    rustc_srcs = "{toolchain_repo}//:rustc_srcs",
94*61c4878aSAndroid Build Coastguard Worker    target_compatible_with = {target_compatible_with},
95*61c4878aSAndroid Build Coastguard Worker    visibility = ["//visibility:public"],
96*61c4878aSAndroid Build Coastguard Worker)
97*61c4878aSAndroid Build Coastguard Worker
98*61c4878aSAndroid Build Coastguard Workertoolchain(
99*61c4878aSAndroid Build Coastguard Worker    name = "{name}",
100*61c4878aSAndroid Build Coastguard Worker    exec_compatible_with = {exec_compatible_with},
101*61c4878aSAndroid Build Coastguard Worker    target_compatible_with = {target_compatible_with},
102*61c4878aSAndroid Build Coastguard Worker    target_settings = {target_settings},
103*61c4878aSAndroid Build Coastguard Worker    toolchain = ":{name}_rust_analyzer_toolchain",
104*61c4878aSAndroid Build Coastguard Worker    toolchain_type = "@rules_rust//rust/rust_analyzer:toolchain_type",
105*61c4878aSAndroid Build Coastguard Worker)
106*61c4878aSAndroid Build Coastguard Worker"""
107*61c4878aSAndroid Build Coastguard Worker
108*61c4878aSAndroid Build Coastguard Workerdef rust_analyzer_toolchain_template(
109*61c4878aSAndroid Build Coastguard Worker        name,
110*61c4878aSAndroid Build Coastguard Worker        toolchain_repo,
111*61c4878aSAndroid Build Coastguard Worker        exec_compatible_with,
112*61c4878aSAndroid Build Coastguard Worker        target_compatible_with,
113*61c4878aSAndroid Build Coastguard Worker        target_settings):
114*61c4878aSAndroid Build Coastguard Worker    return _rust_analyzer_toolchain_template.format(
115*61c4878aSAndroid Build Coastguard Worker        name = name,
116*61c4878aSAndroid Build Coastguard Worker        toolchain_repo = toolchain_repo,
117*61c4878aSAndroid Build Coastguard Worker        exec_compatible_with = json.encode(exec_compatible_with),
118*61c4878aSAndroid Build Coastguard Worker        target_compatible_with = json.encode(target_compatible_with),
119*61c4878aSAndroid Build Coastguard Worker        target_settings = json.encode(target_settings),
120*61c4878aSAndroid Build Coastguard Worker    )
121