xref: /aosp_15_r20/bootable/libbootloader/gbl/smoltcp/BUILD.smoltcp.bazel (revision 5225e6b173e52d2efc6bcf950c27374fd72adabc)
1*5225e6b1SAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project
2*5225e6b1SAndroid Build Coastguard Worker#
3*5225e6b1SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*5225e6b1SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*5225e6b1SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*5225e6b1SAndroid Build Coastguard Worker#
7*5225e6b1SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*5225e6b1SAndroid Build Coastguard Worker#
9*5225e6b1SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*5225e6b1SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*5225e6b1SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*5225e6b1SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*5225e6b1SAndroid Build Coastguard Worker# limitations under the License.
14*5225e6b1SAndroid Build Coastguard Worker
15*5225e6b1SAndroid Build Coastguard Workerload("@rules_rust//rust:defs.bzl", "rust_library")
16*5225e6b1SAndroid Build Coastguard Worker
17*5225e6b1SAndroid Build Coastguard Workerpackage(
18*5225e6b1SAndroid Build Coastguard Worker    default_visibility = ["//visibility:public"],
19*5225e6b1SAndroid Build Coastguard Worker)
20*5225e6b1SAndroid Build Coastguard Worker
21*5225e6b1SAndroid Build Coastguard Worker# Upstream smoltcp uses a custom script in the cargo build flow to generate a `config.rs`
22*5225e6b1SAndroid Build Coastguard Worker# containing a set of configurations. We don't use cargo. Thus we use a pre-generated
23*5225e6b1SAndroid Build Coastguard Worker# one.
24*5225e6b1SAndroid Build Coastguard Workergenrule(
25*5225e6b1SAndroid Build Coastguard Worker    name = "gen_config",
26*5225e6b1SAndroid Build Coastguard Worker    outs = ["src/config.rs"],
27*5225e6b1SAndroid Build Coastguard Worker    cmd = """cat <<EOT > $@
28*5225e6b1SAndroid Build Coastguard Worker    pub const IFACE_MAX_ADDR_COUNT: usize = 2;
29*5225e6b1SAndroid Build Coastguard Worker    pub const IFACE_MAX_MULTICAST_GROUP_COUNT: usize = 4;
30*5225e6b1SAndroid Build Coastguard Worker    pub const IFACE_MAX_SIXLOWPAN_ADDRESS_CONTEXT_COUNT: usize = 4;
31*5225e6b1SAndroid Build Coastguard Worker    pub const IFACE_NEIGHBOR_CACHE_COUNT: usize = 16;
32*5225e6b1SAndroid Build Coastguard Worker    pub const IFACE_MAX_ROUTE_COUNT: usize = 2;
33*5225e6b1SAndroid Build Coastguard Worker    pub const FRAGMENTATION_BUFFER_SIZE: usize = 1500;
34*5225e6b1SAndroid Build Coastguard Worker    pub const ASSEMBLER_MAX_SEGMENT_COUNT: usize = 4;
35*5225e6b1SAndroid Build Coastguard Worker    pub const REASSEMBLY_BUFFER_SIZE: usize = 1500;
36*5225e6b1SAndroid Build Coastguard Worker    pub const REASSEMBLY_BUFFER_COUNT: usize = 1;
37*5225e6b1SAndroid Build Coastguard Worker    pub const IPV6_HBH_MAX_OPTIONS: usize = 1;
38*5225e6b1SAndroid Build Coastguard Worker    pub const DNS_MAX_RESULT_COUNT: usize = 1;
39*5225e6b1SAndroid Build Coastguard Worker    pub const DNS_MAX_SERVER_COUNT: usize = 1;
40*5225e6b1SAndroid Build Coastguard Worker    pub const DNS_MAX_NAME_SIZE: usize = 255;
41*5225e6b1SAndroid Build Coastguard Worker    pub const RPL_RELATIONS_BUFFER_COUNT: usize = 16;
42*5225e6b1SAndroid Build Coastguard Worker    pub const RPL_PARENTS_BUFFER_COUNT: usize = 8;
43*5225e6b1SAndroid Build Coastguard WorkerEOT
44*5225e6b1SAndroid Build Coastguard Worker    """,
45*5225e6b1SAndroid Build Coastguard Worker)
46*5225e6b1SAndroid Build Coastguard Worker
47*5225e6b1SAndroid Build Coastguard Worker# `smoltcp` depends on crate `heapless`, which is still in the process of being imported to Android
48*5225e6b1SAndroid Build Coastguard Worker# (or possibly abandoned http://ag/22200123). For now we use a custom implementation of the APIs as
49*5225e6b1SAndroid Build Coastguard Worker# a workaround.
50*5225e6b1SAndroid Build Coastguard Workergenrule(
51*5225e6b1SAndroid Build Coastguard Worker    name = "heapless_src",
52*5225e6b1SAndroid Build Coastguard Worker    srcs = ["@gbl//smoltcp:heapless.rs"],
53*5225e6b1SAndroid Build Coastguard Worker    outs = ["src/heapless.rs"],
54*5225e6b1SAndroid Build Coastguard Worker    cmd = "cp $(SRCS) $(OUTS)",
55*5225e6b1SAndroid Build Coastguard Worker)
56*5225e6b1SAndroid Build Coastguard Worker
57*5225e6b1SAndroid Build Coastguard Workerrust_library(
58*5225e6b1SAndroid Build Coastguard Worker    name = "heapless",
59*5225e6b1SAndroid Build Coastguard Worker    srcs = ["src/heapless.rs"],
60*5225e6b1SAndroid Build Coastguard Worker    crate_root = "src/heapless.rs",
61*5225e6b1SAndroid Build Coastguard Worker    edition = "2021",
62*5225e6b1SAndroid Build Coastguard Worker)
63*5225e6b1SAndroid Build Coastguard Worker
64*5225e6b1SAndroid Build Coastguard Worker# Add fixup.rs to build and use our own crate root that imports it.
65*5225e6b1SAndroid Build Coastguard Workergenrule(
66*5225e6b1SAndroid Build Coastguard Worker    name = "smoltcp_fixup",
67*5225e6b1SAndroid Build Coastguard Worker    srcs = [
68*5225e6b1SAndroid Build Coastguard Worker        "@gbl//smoltcp:fixup.rs",
69*5225e6b1SAndroid Build Coastguard Worker        "src/lib.rs",
70*5225e6b1SAndroid Build Coastguard Worker    ],
71*5225e6b1SAndroid Build Coastguard Worker    outs = [
72*5225e6b1SAndroid Build Coastguard Worker        "src/fixup.rs",
73*5225e6b1SAndroid Build Coastguard Worker        "src/crate_root.rs",
74*5225e6b1SAndroid Build Coastguard Worker    ],
75*5225e6b1SAndroid Build Coastguard Worker    cmd = """
76*5225e6b1SAndroid Build Coastguard Worker        IFS=" " read -a srcs <<< "$(SRCS)" && \
77*5225e6b1SAndroid Build Coastguard Worker        IFS=" " read -a outs <<< "$(OUTS)" && \
78*5225e6b1SAndroid Build Coastguard Worker        for index in $${!srcs[@]}; do cp $${srcs[$$index]} $${outs[$$index]}; done && \
79*5225e6b1SAndroid Build Coastguard Worker        echo "mod fixup;" >> $${outs[1]}
80*5225e6b1SAndroid Build Coastguard Worker""",
81*5225e6b1SAndroid Build Coastguard Worker)
82*5225e6b1SAndroid Build Coastguard Worker
83*5225e6b1SAndroid Build Coastguard Workerrust_library(
84*5225e6b1SAndroid Build Coastguard Worker    name = "smoltcp",
85*5225e6b1SAndroid Build Coastguard Worker    srcs = glob(
86*5225e6b1SAndroid Build Coastguard Worker        ["**/*.rs"],
87*5225e6b1SAndroid Build Coastguard Worker        exclude = ["src/lib.rs"],
88*5225e6b1SAndroid Build Coastguard Worker    ) + [
89*5225e6b1SAndroid Build Coastguard Worker        "src/config.rs",
90*5225e6b1SAndroid Build Coastguard Worker        "src/crate_root.rs",
91*5225e6b1SAndroid Build Coastguard Worker        "src/fixup.rs",
92*5225e6b1SAndroid Build Coastguard Worker    ],
93*5225e6b1SAndroid Build Coastguard Worker    crate_features = [
94*5225e6b1SAndroid Build Coastguard Worker        "medium-ethernet",
95*5225e6b1SAndroid Build Coastguard Worker        "proto-ipv4",
96*5225e6b1SAndroid Build Coastguard Worker        "proto-ipv6",
97*5225e6b1SAndroid Build Coastguard Worker        "socket",
98*5225e6b1SAndroid Build Coastguard Worker        "socket-tcp",
99*5225e6b1SAndroid Build Coastguard Worker        "socket-icmp",
100*5225e6b1SAndroid Build Coastguard Worker        "socket-udp",
101*5225e6b1SAndroid Build Coastguard Worker    ],
102*5225e6b1SAndroid Build Coastguard Worker    crate_root = "src/crate_root.rs",
103*5225e6b1SAndroid Build Coastguard Worker    data = [
104*5225e6b1SAndroid Build Coastguard Worker        ":gen_config",
105*5225e6b1SAndroid Build Coastguard Worker        ":heapless_src",
106*5225e6b1SAndroid Build Coastguard Worker        ":smoltcp_fixup",
107*5225e6b1SAndroid Build Coastguard Worker    ],
108*5225e6b1SAndroid Build Coastguard Worker    edition = "2021",
109*5225e6b1SAndroid Build Coastguard Worker    rustc_env = {
110*5225e6b1SAndroid Build Coastguard Worker        "OUT_DIR": ".",
111*5225e6b1SAndroid Build Coastguard Worker    },
112*5225e6b1SAndroid Build Coastguard Worker    rustc_flags = [
113*5225e6b1SAndroid Build Coastguard Worker        # Always compile this crate in release mode. Otherwise it is too slow.
114*5225e6b1SAndroid Build Coastguard Worker        "-O",
115*5225e6b1SAndroid Build Coastguard Worker        "-A",
116*5225e6b1SAndroid Build Coastguard Worker        "unused_imports",
117*5225e6b1SAndroid Build Coastguard Worker        "-A",
118*5225e6b1SAndroid Build Coastguard Worker        "dead_code",
119*5225e6b1SAndroid Build Coastguard Worker        "-A",
120*5225e6b1SAndroid Build Coastguard Worker        "unreachable_patterns",
121*5225e6b1SAndroid Build Coastguard Worker        "-A",
122*5225e6b1SAndroid Build Coastguard Worker        "unused_variables",
123*5225e6b1SAndroid Build Coastguard Worker    ],
124*5225e6b1SAndroid Build Coastguard Worker    deps = [
125*5225e6b1SAndroid Build Coastguard Worker        ":heapless",
126*5225e6b1SAndroid Build Coastguard Worker        "@bitflags",
127*5225e6b1SAndroid Build Coastguard Worker        "@byteorder",
128*5225e6b1SAndroid Build Coastguard Worker        "@cfg-if",
129*5225e6b1SAndroid Build Coastguard Worker        "@managed",
130*5225e6b1SAndroid Build Coastguard Worker    ],
131*5225e6b1SAndroid Build Coastguard Worker)
132