// 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{}