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