| // Copyright 2022 Google Inc. All rights reserved. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| package config | |
| import ( | |
| "strings" | |
| "android/soong/android" | |
| ) | |
| var ( | |
| linuxArmRustflags = []string{} | |
| linuxArmLinkflags = []string{} | |
| linuxArm64Rustflags = []string{} | |
| linuxArm64Linkflags = []string{} | |
| ) | |
| func init() { | |
| registerToolchainFactory(android.LinuxMusl, android.Arm64, linuxMuslArm64ToolchainFactory) | |
| registerToolchainFactory(android.LinuxMusl, android.Arm, linuxMuslArmToolchainFactory) | |
| pctx.StaticVariable("LinuxToolchainArmRustFlags", strings.Join(linuxArmRustflags, " ")) | |
| pctx.StaticVariable("LinuxToolchainArmLinkFlags", strings.Join(linuxArmLinkflags, " ")) | |
| pctx.StaticVariable("LinuxToolchainArm64RustFlags", strings.Join(linuxArm64Rustflags, " ")) | |
| pctx.StaticVariable("LinuxToolchainArm64LinkFlags", strings.Join(linuxArm64Linkflags, " ")) | |
| } | |
| // Base 64-bit linux rust toolchain | |
| type toolchainLinuxArm64 struct { | |
| toolchain64Bit | |
| } | |
| func (toolchainLinuxArm64) Supported() bool { | |
| return true | |
| } | |
| func (toolchainLinuxArm64) Bionic() bool { | |
| return false | |
| } | |
| func (t *toolchainLinuxArm64) Name() string { | |
| return "arm64" | |
| } | |
| func (t *toolchainLinuxArm64) ToolchainLinkFlags() string { | |
| // Prepend the lld flags from cc_config so we stay in sync with cc | |
| return "${cc_config.LinuxLldflags} ${cc_config.LinuxArm64Lldflags} " + | |
| "${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainArm64LinkFlags}" | |
| } | |
| func (t *toolchainLinuxArm64) ToolchainRustFlags() string { | |
| return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainArm64RustFlags}" | |
| } | |
| // Specialization of the 64-bit linux rust toolchain for musl. Adds the musl rust triple and | |
| // linker flags to avoid using the host sysroot. | |
| type toolchainLinuxMuslArm64 struct { | |
| toolchainLinuxArm64 | |
| } | |
| func (t *toolchainLinuxMuslArm64) RustTriple() string { | |
| return "aarch64-unknown-linux-musl" | |
| } | |
| func (t *toolchainLinuxMuslArm64) ToolchainLinkFlags() string { | |
| return t.toolchainLinuxArm64.ToolchainLinkFlags() + " " + "${config.LinuxMuslToolchainLinkFlags}" | |
| } | |
| func (t *toolchainLinuxMuslArm64) ToolchainRustFlags() string { | |
| return t.toolchainLinuxArm64.ToolchainRustFlags() + " " + "${config.LinuxMuslToolchainRustFlags}" | |
| } | |
| func linuxMuslArm64ToolchainFactory(arch android.Arch) Toolchain { | |
| return toolchainLinuxMuslArm64Singleton | |
| } | |
| // Base 32-bit linux rust toolchain | |
| type toolchainLinuxArm struct { | |
| toolchain32Bit | |
| } | |
| func (toolchainLinuxArm) Supported() bool { | |
| return true | |
| } | |
| func (toolchainLinuxArm) Bionic() bool { | |
| return false | |
| } | |
| func (t *toolchainLinuxArm) Name() string { | |
| return "arm" | |
| } | |
| func (toolchainLinuxArm) LibclangRuntimeLibraryArch() string { | |
| return "arm" | |
| } | |
| func (toolchainLinuxArm64) LibclangRuntimeLibraryArch() string { | |
| return "arm64" | |
| } | |
| func (t *toolchainLinuxArm) ToolchainLinkFlags() string { | |
| // Prepend the lld flags from cc_config so we stay in sync with cc | |
| return "${cc_config.LinuxLldflags} ${cc_config.LinuxArmLldflags} " + | |
| "${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainArmLinkFlags}" | |
| } | |
| func (t *toolchainLinuxArm) ToolchainRustFlags() string { | |
| return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainArmRustFlags}" | |
| } | |
| // Specialization of the 32-bit linux rust toolchain for musl. Adds the musl rust triple and | |
| // linker flags to avoid using the host sysroot. | |
| type toolchainLinuxMuslArm struct { | |
| toolchainLinuxArm | |
| } | |
| func (t *toolchainLinuxMuslArm) RustTriple() string { | |
| return "arm-unknown-linux-musleabihf" | |
| } | |
| func (t *toolchainLinuxMuslArm) ToolchainLinkFlags() string { | |
| return t.toolchainLinuxArm.ToolchainLinkFlags() + " " + "${config.LinuxMuslToolchainLinkFlags}" | |
| } | |
| func (t *toolchainLinuxMuslArm) ToolchainRustFlags() string { | |
| return t.toolchainLinuxArm.ToolchainRustFlags() + " " + "${config.LinuxMuslToolchainRustFlags}" | |
| } | |
| func linuxMuslArmToolchainFactory(arch android.Arch) Toolchain { | |
| return toolchainLinuxMuslArmSingleton | |
| } | |
| var toolchainLinuxMuslArm64Singleton Toolchain = &toolchainLinuxMuslArm64{} | |
| var toolchainLinuxMuslArmSingleton Toolchain = &toolchainLinuxMuslArm{} |