1// Copyright 2022 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package config 16 17import ( 18 "strings" 19 20 "android/soong/android" 21) 22 23var ( 24 Riscv64RustFlags = []string{} 25 Riscv64ArchFeatureRustFlags = map[string][]string{"": {}} 26 Riscv64LinkFlags = []string{} 27 28 Riscv64ArchVariantRustFlags = map[string][]string{"": {}} 29) 30 31func init() { 32 registerToolchainFactory(android.Android, android.Riscv64, Riscv64ToolchainFactory) 33 34 pctx.StaticVariable("Riscv64ToolchainRustFlags", strings.Join(Riscv64RustFlags, " ")) 35 pctx.StaticVariable("Riscv64ToolchainLinkFlags", strings.Join(Riscv64LinkFlags, " ")) 36 37 for variant, rustFlags := range Riscv64ArchVariantRustFlags { 38 pctx.StaticVariable("Riscv64"+variant+"VariantRustFlags", 39 strings.Join(rustFlags, " ")) 40 } 41 42} 43 44type toolchainRiscv64 struct { 45 toolchain64Bit 46 toolchainRustFlags string 47} 48 49func (t *toolchainRiscv64) RustTriple() string { 50 return "riscv64-linux-android" 51} 52 53func (t *toolchainRiscv64) ToolchainLinkFlags() string { 54 // Prepend the lld flags from cc_config so we stay in sync with cc 55 return "${config.DeviceGlobalLinkFlags} ${cc_config.Riscv64Lldflags} ${config.Riscv64ToolchainLinkFlags}" 56} 57 58func (t *toolchainRiscv64) ToolchainRustFlags() string { 59 return t.toolchainRustFlags 60} 61 62func (t *toolchainRiscv64) RustFlags() string { 63 return "${config.Riscv64ToolchainRustFlags}" 64} 65 66func (t *toolchainRiscv64) Supported() bool { 67 return true 68} 69 70func (toolchainRiscv64) LibclangRuntimeLibraryArch() string { 71 return "riscv64" 72} 73 74func Riscv64ToolchainFactory(arch android.Arch) Toolchain { 75 archVariant := arch.ArchVariant 76 77 toolchainRustFlags := []string{ 78 "${config.Riscv64ToolchainRustFlags}", 79 "${config.Riscv64" + archVariant + "VariantRustFlags}", 80 } 81 82 toolchainRustFlags = append(toolchainRustFlags, deviceGlobalRustFlags...) 83 84 for _, feature := range arch.ArchFeatures { 85 toolchainRustFlags = append(toolchainRustFlags, Riscv64ArchFeatureRustFlags[feature]...) 86 } 87 88 return &toolchainRiscv64{ 89 toolchainRustFlags: strings.Join(toolchainRustFlags, " "), 90 } 91} 92