1// Copyright 2019 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 _ "android/soong/cc/config" 22) 23 24var pctx = android.NewPackageContext("android/soong/rust/config") 25 26var ( 27 RustDefaultVersion = "1.44.0" 28 RustDefaultBase = "prebuilts/rust/" 29 DefaultEdition = "2018" 30 Stdlibs = []string{ 31 "libstd", 32 "libtest", 33 } 34 35 GlobalRustFlags = []string{ 36 "--remap-path-prefix $$(pwd)=", 37 "-C codegen-units=1", 38 "-C opt-level=3", 39 "-C relocation-model=pic", 40 } 41 42 deviceGlobalRustFlags = []string{} 43 44 deviceGlobalLinkFlags = []string{ 45 "-Bdynamic", 46 "-nostdlib", 47 "-Wl,-z,noexecstack", 48 "-Wl,-z,relro", 49 "-Wl,-z,now", 50 "-Wl,--build-id=md5", 51 "-Wl,--warn-shared-textrel", 52 "-Wl,--fatal-warnings", 53 54 "-Wl,--pack-dyn-relocs=android+relr", 55 "-Wl,--no-undefined", 56 "-Wl,--hash-style=gnu", 57 58 "-B${ccConfig.ClangBin}", 59 "-fuse-ld=lld", 60 } 61) 62 63func init() { 64 pctx.SourcePathVariable("RustDefaultBase", RustDefaultBase) 65 pctx.VariableConfigMethod("HostPrebuiltTag", android.Config.PrebuiltOS) 66 67 pctx.VariableFunc("RustBase", func(ctx android.PackageVarContext) string { 68 if override := ctx.Config().Getenv("RUST_PREBUILTS_BASE"); override != "" { 69 return override 70 } 71 return "${RustDefaultBase}" 72 }) 73 74 pctx.VariableFunc("RustVersion", func(ctx android.PackageVarContext) string { 75 if override := ctx.Config().Getenv("RUST_PREBUILTS_VERSION"); override != "" { 76 return override 77 } 78 return RustDefaultVersion 79 }) 80 81 pctx.StaticVariable("RustPath", "${RustBase}/${HostPrebuiltTag}/${RustVersion}") 82 pctx.StaticVariable("RustBin", "${RustPath}/bin") 83 84 pctx.ImportAs("ccConfig", "android/soong/cc/config") 85 pctx.StaticVariable("RustLinker", "${ccConfig.ClangBin}/clang++") 86 pctx.StaticVariable("RustLinkerArgs", "") 87 88 pctx.StaticVariable("DeviceGlobalLinkFlags", strings.Join(deviceGlobalLinkFlags, " ")) 89 90} 91