1*333d2b36SAndroid Build Coastguard Worker// Copyright 2022 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage config 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "strings" 19*333d2b36SAndroid Build Coastguard Worker 20*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 21*333d2b36SAndroid Build Coastguard Worker) 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Workervar ( 24*333d2b36SAndroid Build Coastguard Worker linuxArmRustflags = []string{} 25*333d2b36SAndroid Build Coastguard Worker linuxArmLinkflags = []string{} 26*333d2b36SAndroid Build Coastguard Worker linuxArm64Rustflags = []string{} 27*333d2b36SAndroid Build Coastguard Worker linuxArm64Linkflags = []string{} 28*333d2b36SAndroid Build Coastguard Worker) 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Workerfunc init() { 31*333d2b36SAndroid Build Coastguard Worker registerToolchainFactory(android.LinuxMusl, android.Arm64, linuxMuslArm64ToolchainFactory) 32*333d2b36SAndroid Build Coastguard Worker registerToolchainFactory(android.LinuxMusl, android.Arm, linuxMuslArmToolchainFactory) 33*333d2b36SAndroid Build Coastguard Worker 34*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("LinuxToolchainArmRustFlags", strings.Join(linuxArmRustflags, " ")) 35*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("LinuxToolchainArmLinkFlags", strings.Join(linuxArmLinkflags, " ")) 36*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("LinuxToolchainArm64RustFlags", strings.Join(linuxArm64Rustflags, " ")) 37*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("LinuxToolchainArm64LinkFlags", strings.Join(linuxArm64Linkflags, " ")) 38*333d2b36SAndroid Build Coastguard Worker} 39*333d2b36SAndroid Build Coastguard Worker 40*333d2b36SAndroid Build Coastguard Worker// Base 64-bit linux rust toolchain 41*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxArm64 struct { 42*333d2b36SAndroid Build Coastguard Worker toolchain64Bit 43*333d2b36SAndroid Build Coastguard Worker} 44*333d2b36SAndroid Build Coastguard Worker 45*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxArm64) Supported() bool { 46*333d2b36SAndroid Build Coastguard Worker return true 47*333d2b36SAndroid Build Coastguard Worker} 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxArm64) Bionic() bool { 50*333d2b36SAndroid Build Coastguard Worker return false 51*333d2b36SAndroid Build Coastguard Worker} 52*333d2b36SAndroid Build Coastguard Worker 53*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxArm64) Name() string { 54*333d2b36SAndroid Build Coastguard Worker return "arm64" 55*333d2b36SAndroid Build Coastguard Worker} 56*333d2b36SAndroid Build Coastguard Worker 57*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxArm64) ToolchainLinkFlags() string { 58*333d2b36SAndroid Build Coastguard Worker // Prepend the lld flags from cc_config so we stay in sync with cc 59*333d2b36SAndroid Build Coastguard Worker return "${cc_config.LinuxLldflags} ${cc_config.LinuxArm64Lldflags} " + 60*333d2b36SAndroid Build Coastguard Worker "${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainArm64LinkFlags}" 61*333d2b36SAndroid Build Coastguard Worker} 62*333d2b36SAndroid Build Coastguard Worker 63*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxArm64) ToolchainRustFlags() string { 64*333d2b36SAndroid Build Coastguard Worker return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainArm64RustFlags}" 65*333d2b36SAndroid Build Coastguard Worker} 66*333d2b36SAndroid Build Coastguard Worker 67*333d2b36SAndroid Build Coastguard Worker// Specialization of the 64-bit linux rust toolchain for musl. Adds the musl rust triple and 68*333d2b36SAndroid Build Coastguard Worker// linker flags to avoid using the host sysroot. 69*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxMuslArm64 struct { 70*333d2b36SAndroid Build Coastguard Worker toolchainLinuxArm64 71*333d2b36SAndroid Build Coastguard Worker} 72*333d2b36SAndroid Build Coastguard Worker 73*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslArm64) RustTriple() string { 74*333d2b36SAndroid Build Coastguard Worker return "aarch64-unknown-linux-musl" 75*333d2b36SAndroid Build Coastguard Worker} 76*333d2b36SAndroid Build Coastguard Worker 77*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslArm64) ToolchainLinkFlags() string { 78*333d2b36SAndroid Build Coastguard Worker return t.toolchainLinuxArm64.ToolchainLinkFlags() + " " + "${config.LinuxMuslToolchainLinkFlags}" 79*333d2b36SAndroid Build Coastguard Worker} 80*333d2b36SAndroid Build Coastguard Worker 81*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslArm64) ToolchainRustFlags() string { 82*333d2b36SAndroid Build Coastguard Worker return t.toolchainLinuxArm64.ToolchainRustFlags() + " " + "${config.LinuxMuslToolchainRustFlags}" 83*333d2b36SAndroid Build Coastguard Worker} 84*333d2b36SAndroid Build Coastguard Worker 85*333d2b36SAndroid Build Coastguard Workerfunc linuxMuslArm64ToolchainFactory(arch android.Arch) Toolchain { 86*333d2b36SAndroid Build Coastguard Worker return toolchainLinuxMuslArm64Singleton 87*333d2b36SAndroid Build Coastguard Worker} 88*333d2b36SAndroid Build Coastguard Worker 89*333d2b36SAndroid Build Coastguard Worker// Base 32-bit linux rust toolchain 90*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxArm struct { 91*333d2b36SAndroid Build Coastguard Worker toolchain32Bit 92*333d2b36SAndroid Build Coastguard Worker} 93*333d2b36SAndroid Build Coastguard Worker 94*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxArm) Supported() bool { 95*333d2b36SAndroid Build Coastguard Worker return true 96*333d2b36SAndroid Build Coastguard Worker} 97*333d2b36SAndroid Build Coastguard Worker 98*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxArm) Bionic() bool { 99*333d2b36SAndroid Build Coastguard Worker return false 100*333d2b36SAndroid Build Coastguard Worker} 101*333d2b36SAndroid Build Coastguard Worker 102*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxArm) Name() string { 103*333d2b36SAndroid Build Coastguard Worker return "arm" 104*333d2b36SAndroid Build Coastguard Worker} 105*333d2b36SAndroid Build Coastguard Worker 106*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxArm) LibclangRuntimeLibraryArch() string { 107*333d2b36SAndroid Build Coastguard Worker return "arm" 108*333d2b36SAndroid Build Coastguard Worker} 109*333d2b36SAndroid Build Coastguard Worker 110*333d2b36SAndroid Build Coastguard Workerfunc (toolchainLinuxArm64) LibclangRuntimeLibraryArch() string { 111*333d2b36SAndroid Build Coastguard Worker return "arm64" 112*333d2b36SAndroid Build Coastguard Worker} 113*333d2b36SAndroid Build Coastguard Worker 114*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxArm) ToolchainLinkFlags() string { 115*333d2b36SAndroid Build Coastguard Worker // Prepend the lld flags from cc_config so we stay in sync with cc 116*333d2b36SAndroid Build Coastguard Worker return "${cc_config.LinuxLldflags} ${cc_config.LinuxArmLldflags} " + 117*333d2b36SAndroid Build Coastguard Worker "${config.LinuxToolchainLinkFlags} ${config.LinuxToolchainArmLinkFlags}" 118*333d2b36SAndroid Build Coastguard Worker} 119*333d2b36SAndroid Build Coastguard Worker 120*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxArm) ToolchainRustFlags() string { 121*333d2b36SAndroid Build Coastguard Worker return "${config.LinuxToolchainRustFlags} ${config.LinuxToolchainArmRustFlags}" 122*333d2b36SAndroid Build Coastguard Worker} 123*333d2b36SAndroid Build Coastguard Worker 124*333d2b36SAndroid Build Coastguard Worker// Specialization of the 32-bit linux rust toolchain for musl. Adds the musl rust triple and 125*333d2b36SAndroid Build Coastguard Worker// linker flags to avoid using the host sysroot. 126*333d2b36SAndroid Build Coastguard Workertype toolchainLinuxMuslArm struct { 127*333d2b36SAndroid Build Coastguard Worker toolchainLinuxArm 128*333d2b36SAndroid Build Coastguard Worker} 129*333d2b36SAndroid Build Coastguard Worker 130*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslArm) RustTriple() string { 131*333d2b36SAndroid Build Coastguard Worker return "arm-unknown-linux-musleabihf" 132*333d2b36SAndroid Build Coastguard Worker} 133*333d2b36SAndroid Build Coastguard Worker 134*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslArm) ToolchainLinkFlags() string { 135*333d2b36SAndroid Build Coastguard Worker return t.toolchainLinuxArm.ToolchainLinkFlags() + " " + "${config.LinuxMuslToolchainLinkFlags}" 136*333d2b36SAndroid Build Coastguard Worker} 137*333d2b36SAndroid Build Coastguard Worker 138*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainLinuxMuslArm) ToolchainRustFlags() string { 139*333d2b36SAndroid Build Coastguard Worker return t.toolchainLinuxArm.ToolchainRustFlags() + " " + "${config.LinuxMuslToolchainRustFlags}" 140*333d2b36SAndroid Build Coastguard Worker} 141*333d2b36SAndroid Build Coastguard Worker 142*333d2b36SAndroid Build Coastguard Workerfunc linuxMuslArmToolchainFactory(arch android.Arch) Toolchain { 143*333d2b36SAndroid Build Coastguard Worker return toolchainLinuxMuslArmSingleton 144*333d2b36SAndroid Build Coastguard Worker} 145*333d2b36SAndroid Build Coastguard Worker 146*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxMuslArm64Singleton Toolchain = &toolchainLinuxMuslArm64{} 147*333d2b36SAndroid Build Coastguard Workervar toolchainLinuxMuslArmSingleton Toolchain = &toolchainLinuxMuslArm{} 148