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) 22 23var ( 24 LinuxRustFlags = []string{} 25 LinuxRustLinkFlags = []string{} 26 linuxX86Rustflags = []string{} 27 linuxX86Linkflags = []string{} 28 linuxX8664Rustflags = []string{} 29 linuxX8664Linkflags = []string{} 30) 31 32func init() { 33 registerToolchainFactory(android.Linux, android.X86_64, linuxX8664ToolchainFactory) 34 registerToolchainFactory(android.Linux, android.X86, linuxX86ToolchainFactory) 35 36 pctx.StaticVariable("LinuxToolchainRustFlags", strings.Join(LinuxRustFlags, " ")) 37 pctx.StaticVariable("LinuxToolchainLinkFlags", strings.Join(LinuxRustLinkFlags, " ")) 38 pctx.StaticVariable("LinuxToolchainX86RustFlags", strings.Join(linuxX86Rustflags, " ")) 39 pctx.StaticVariable("LinuxToolchainX86LinkFlags", strings.Join(linuxX86Linkflags, " ")) 40 pctx.StaticVariable("LinuxToolchainX8664RustFlags", strings.Join(linuxX8664Rustflags, " ")) 41 pctx.StaticVariable("LinuxToolchainX8664LinkFlags", strings.Join(linuxX8664Linkflags, " ")) 42 43} 44 45type toolchainLinux struct { 46 toolchainRustFlags string 47 toolchainLinkFlags string 48} 49 50type toolchainLinuxX86 struct { 51 toolchain32Bit 52 toolchainLinux 53} 54 55type toolchainLinuxX8664 struct { 56 toolchain64Bit 57 toolchainLinux 58} 59 60func (toolchainLinuxX8664) Supported() bool { 61 return true 62} 63 64func (toolchainLinuxX8664) Bionic() bool { 65 return false 66} 67 68func (t *toolchainLinuxX8664) Name() string { 69 return "x86_64" 70} 71 72func (t *toolchainLinuxX8664) RustTriple() string { 73 return "x86_64-unknown-linux-gnu" 74} 75 76func (t *toolchainLinuxX8664) ToolchainLinkFlags() string { 77 return "${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainX8664LinkFlags}" 78} 79 80func (t *toolchainLinuxX8664) ToolchainRustFlags() string { 81 return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainX8664RustFlags}" 82} 83 84func linuxX8664ToolchainFactory(arch android.Arch) Toolchain { 85 return toolchainLinuxX8664Singleton 86} 87 88func (toolchainLinuxX86) Supported() bool { 89 return true 90} 91 92func (toolchainLinuxX86) Bionic() bool { 93 return false 94} 95 96func (t *toolchainLinuxX86) Name() string { 97 return "x86" 98} 99 100func (t *toolchainLinuxX86) RustTriple() string { 101 return "i686-unknown-linux-gnu" 102} 103 104func (t *toolchainLinuxX86) ToolchainLinkFlags() string { 105 return "${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainX86LinkFlags}" 106} 107 108func (t *toolchainLinuxX86) ToolchainRustFlags() string { 109 return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainX86RustFlags}" 110} 111 112func linuxX86ToolchainFactory(arch android.Arch) Toolchain { 113 return toolchainLinuxX86Singleton 114} 115 116var toolchainLinuxX8664Singleton Toolchain = &toolchainLinuxX8664{} 117var toolchainLinuxX86Singleton Toolchain = &toolchainLinuxX86{} 118