1*333d2b36SAndroid Build Coastguard Worker// Copyright 2015 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 "fmt" 19*333d2b36SAndroid Build Coastguard Worker "strings" 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 22*333d2b36SAndroid Build Coastguard Worker) 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Workervar ( 25*333d2b36SAndroid Build Coastguard Worker armToolchainCflags = []string{ 26*333d2b36SAndroid Build Coastguard Worker "-msoft-float", 27*333d2b36SAndroid Build Coastguard Worker } 28*333d2b36SAndroid Build Coastguard Worker 29*333d2b36SAndroid Build Coastguard Worker armCflags = []string{ 30*333d2b36SAndroid Build Coastguard Worker "-fomit-frame-pointer", 31*333d2b36SAndroid Build Coastguard Worker // Revert this after b/322359235 is fixed 32*333d2b36SAndroid Build Coastguard Worker "-mllvm", "-enable-shrink-wrap=false", 33*333d2b36SAndroid Build Coastguard Worker } 34*333d2b36SAndroid Build Coastguard Worker 35*333d2b36SAndroid Build Coastguard Worker armCppflags = []string{ 36*333d2b36SAndroid Build Coastguard Worker // Revert this after b/322359235 is fixed 37*333d2b36SAndroid Build Coastguard Worker "-mllvm", "-enable-shrink-wrap=false", 38*333d2b36SAndroid Build Coastguard Worker } 39*333d2b36SAndroid Build Coastguard Worker 40*333d2b36SAndroid Build Coastguard Worker armLdflags = []string{ 41*333d2b36SAndroid Build Coastguard Worker "-Wl,-m,armelf", 42*333d2b36SAndroid Build Coastguard Worker // Revert this after b/322359235 is fixed 43*333d2b36SAndroid Build Coastguard Worker "-Wl,-mllvm", "-Wl,-enable-shrink-wrap=false", 44*333d2b36SAndroid Build Coastguard Worker } 45*333d2b36SAndroid Build Coastguard Worker 46*333d2b36SAndroid Build Coastguard Worker armLldflags = armLdflags 47*333d2b36SAndroid Build Coastguard Worker 48*333d2b36SAndroid Build Coastguard Worker armFixCortexA8LdFlags = []string{"-Wl,--fix-cortex-a8"} 49*333d2b36SAndroid Build Coastguard Worker 50*333d2b36SAndroid Build Coastguard Worker armNoFixCortexA8LdFlags = []string{"-Wl,--no-fix-cortex-a8"} 51*333d2b36SAndroid Build Coastguard Worker 52*333d2b36SAndroid Build Coastguard Worker armArmCflags = []string{} 53*333d2b36SAndroid Build Coastguard Worker 54*333d2b36SAndroid Build Coastguard Worker armThumbCflags = []string{ 55*333d2b36SAndroid Build Coastguard Worker "-mthumb", 56*333d2b36SAndroid Build Coastguard Worker "-Os", 57*333d2b36SAndroid Build Coastguard Worker } 58*333d2b36SAndroid Build Coastguard Worker 59*333d2b36SAndroid Build Coastguard Worker armArchVariantCflags = map[string][]string{ 60*333d2b36SAndroid Build Coastguard Worker "armv7-a": []string{ 61*333d2b36SAndroid Build Coastguard Worker "-march=armv7-a", 62*333d2b36SAndroid Build Coastguard Worker "-mfloat-abi=softfp", 63*333d2b36SAndroid Build Coastguard Worker "-mfpu=vfpv3-d16", 64*333d2b36SAndroid Build Coastguard Worker }, 65*333d2b36SAndroid Build Coastguard Worker "armv7-a-neon": []string{ 66*333d2b36SAndroid Build Coastguard Worker "-march=armv7-a", 67*333d2b36SAndroid Build Coastguard Worker "-mfloat-abi=softfp", 68*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon", 69*333d2b36SAndroid Build Coastguard Worker }, 70*333d2b36SAndroid Build Coastguard Worker "armv8-a": []string{ 71*333d2b36SAndroid Build Coastguard Worker "-march=armv8-a", 72*333d2b36SAndroid Build Coastguard Worker "-mfloat-abi=softfp", 73*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-fp-armv8", 74*333d2b36SAndroid Build Coastguard Worker }, 75*333d2b36SAndroid Build Coastguard Worker "armv8-2a": []string{ 76*333d2b36SAndroid Build Coastguard Worker "-march=armv8.2-a", 77*333d2b36SAndroid Build Coastguard Worker "-mfloat-abi=softfp", 78*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-fp-armv8", 79*333d2b36SAndroid Build Coastguard Worker }, 80*333d2b36SAndroid Build Coastguard Worker } 81*333d2b36SAndroid Build Coastguard Worker 82*333d2b36SAndroid Build Coastguard Worker armCpuVariantCflags = map[string][]string{ 83*333d2b36SAndroid Build Coastguard Worker "cortex-a7": []string{ 84*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a7", 85*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-vfpv4", 86*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 87*333d2b36SAndroid Build Coastguard Worker // don't advertise. 88*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 89*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 90*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 91*333d2b36SAndroid Build Coastguard Worker }, 92*333d2b36SAndroid Build Coastguard Worker "cortex-a8": []string{ 93*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a8", 94*333d2b36SAndroid Build Coastguard Worker }, 95*333d2b36SAndroid Build Coastguard Worker "cortex-a15": []string{ 96*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a15", 97*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-vfpv4", 98*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 99*333d2b36SAndroid Build Coastguard Worker // don't advertise. 100*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 101*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 102*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 103*333d2b36SAndroid Build Coastguard Worker }, 104*333d2b36SAndroid Build Coastguard Worker "cortex-a32": []string{ 105*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a32", 106*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-vfpv4", 107*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 108*333d2b36SAndroid Build Coastguard Worker // don't advertise. 109*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 110*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 111*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 112*333d2b36SAndroid Build Coastguard Worker }, 113*333d2b36SAndroid Build Coastguard Worker "cortex-a53": []string{ 114*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a53", 115*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-fp-armv8", 116*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 117*333d2b36SAndroid Build Coastguard Worker // don't advertise. 118*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 119*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 120*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 121*333d2b36SAndroid Build Coastguard Worker }, 122*333d2b36SAndroid Build Coastguard Worker "cortex-a55": []string{ 123*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a55", 124*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-fp-armv8", 125*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 126*333d2b36SAndroid Build Coastguard Worker // don't advertise. 127*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 128*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 129*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 130*333d2b36SAndroid Build Coastguard Worker }, 131*333d2b36SAndroid Build Coastguard Worker "cortex-a75": []string{ 132*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a55", 133*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-fp-armv8", 134*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 135*333d2b36SAndroid Build Coastguard Worker // don't advertise. 136*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 137*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 138*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 139*333d2b36SAndroid Build Coastguard Worker }, 140*333d2b36SAndroid Build Coastguard Worker "cortex-a76": []string{ 141*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a55", 142*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-fp-armv8", 143*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 144*333d2b36SAndroid Build Coastguard Worker // don't advertise. 145*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 146*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 147*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 148*333d2b36SAndroid Build Coastguard Worker }, 149*333d2b36SAndroid Build Coastguard Worker "krait": []string{ 150*333d2b36SAndroid Build Coastguard Worker "-mcpu=krait", 151*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-vfpv4", 152*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 153*333d2b36SAndroid Build Coastguard Worker // don't advertise. 154*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 155*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 156*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 157*333d2b36SAndroid Build Coastguard Worker }, 158*333d2b36SAndroid Build Coastguard Worker "kryo": []string{ 159*333d2b36SAndroid Build Coastguard Worker // Use cortex-a53 because the GNU assembler doesn't recognize -mcpu=kryo 160*333d2b36SAndroid Build Coastguard Worker // even though clang does. 161*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a53", 162*333d2b36SAndroid Build Coastguard Worker "-mfpu=neon-fp-armv8", 163*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 164*333d2b36SAndroid Build Coastguard Worker // don't advertise. 165*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 166*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 167*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 168*333d2b36SAndroid Build Coastguard Worker }, 169*333d2b36SAndroid Build Coastguard Worker "kryo385": []string{ 170*333d2b36SAndroid Build Coastguard Worker // Use cortex-a53 because kryo385 is not supported in clang. 171*333d2b36SAndroid Build Coastguard Worker "-mcpu=cortex-a53", 172*333d2b36SAndroid Build Coastguard Worker // Fake an ARM compiler flag as these processors support LPAE which clang 173*333d2b36SAndroid Build Coastguard Worker // don't advertise. 174*333d2b36SAndroid Build Coastguard Worker // TODO This is a hack and we need to add it for each processor that supports LPAE until some 175*333d2b36SAndroid Build Coastguard Worker // better solution comes around. See Bug 27340895 176*333d2b36SAndroid Build Coastguard Worker "-D__ARM_FEATURE_LPAE=1", 177*333d2b36SAndroid Build Coastguard Worker }, 178*333d2b36SAndroid Build Coastguard Worker } 179*333d2b36SAndroid Build Coastguard Worker) 180*333d2b36SAndroid Build Coastguard Worker 181*333d2b36SAndroid Build Coastguard Workerconst ( 182*333d2b36SAndroid Build Coastguard Worker name = "arm" 183*333d2b36SAndroid Build Coastguard Worker ndkTriple = "arm-linux-androideabi" 184*333d2b36SAndroid Build Coastguard Worker clangTriple = "armv7a-linux-androideabi" 185*333d2b36SAndroid Build Coastguard Worker) 186*333d2b36SAndroid Build Coastguard Worker 187*333d2b36SAndroid Build Coastguard Workerfunc init() { 188*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmLdflags", strings.Join(armLdflags, " ")) 189*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmLldflags", strings.Join(armLldflags, " ")) 190*333d2b36SAndroid Build Coastguard Worker 191*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmFixCortexA8LdFlags", strings.Join(armFixCortexA8LdFlags, " ")) 192*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmNoFixCortexA8LdFlags", strings.Join(armNoFixCortexA8LdFlags, " ")) 193*333d2b36SAndroid Build Coastguard Worker 194*333d2b36SAndroid Build Coastguard Worker // Clang cflags 195*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmToolchainCflags", strings.Join(armToolchainCflags, " ")) 196*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCflags", strings.Join(armCflags, " ")) 197*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCppflags", strings.Join(armCppflags, " ")) 198*333d2b36SAndroid Build Coastguard Worker 199*333d2b36SAndroid Build Coastguard Worker // Clang ARM vs. Thumb instruction set cflags 200*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmArmCflags", strings.Join(armArmCflags, " ")) 201*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmThumbCflags", strings.Join(armThumbCflags, " ")) 202*333d2b36SAndroid Build Coastguard Worker 203*333d2b36SAndroid Build Coastguard Worker // Clang arch variant cflags 204*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmArmv7ACflags", strings.Join(armArchVariantCflags["armv7-a"], " ")) 205*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmArmv7ANeonCflags", strings.Join(armArchVariantCflags["armv7-a-neon"], " ")) 206*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmArmv8ACflags", strings.Join(armArchVariantCflags["armv8-a"], " ")) 207*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmArmv82ACflags", strings.Join(armArchVariantCflags["armv8-2a"], " ")) 208*333d2b36SAndroid Build Coastguard Worker 209*333d2b36SAndroid Build Coastguard Worker // Clang cpu variant cflags 210*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmGenericCflags", strings.Join(armCpuVariantCflags[""], " ")) 211*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCortexA7Cflags", strings.Join(armCpuVariantCflags["cortex-a7"], " ")) 212*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCortexA8Cflags", strings.Join(armCpuVariantCflags["cortex-a8"], " ")) 213*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCortexA15Cflags", strings.Join(armCpuVariantCflags["cortex-a15"], " ")) 214*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCortexA32Cflags", strings.Join(armCpuVariantCflags["cortex-a32"], " ")) 215*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCortexA53Cflags", strings.Join(armCpuVariantCflags["cortex-a53"], " ")) 216*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmCortexA55Cflags", strings.Join(armCpuVariantCflags["cortex-a55"], " ")) 217*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmKraitCflags", strings.Join(armCpuVariantCflags["krait"], " ")) 218*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ArmKryoCflags", strings.Join(armCpuVariantCflags["kryo"], " ")) 219*333d2b36SAndroid Build Coastguard Worker} 220*333d2b36SAndroid Build Coastguard Worker 221*333d2b36SAndroid Build Coastguard Workervar ( 222*333d2b36SAndroid Build Coastguard Worker armArchVariantCflagsVar = map[string]string{ 223*333d2b36SAndroid Build Coastguard Worker "armv7-a": "${config.ArmArmv7ACflags}", 224*333d2b36SAndroid Build Coastguard Worker "armv7-a-neon": "${config.ArmArmv7ANeonCflags}", 225*333d2b36SAndroid Build Coastguard Worker "armv8-a": "${config.ArmArmv8ACflags}", 226*333d2b36SAndroid Build Coastguard Worker "armv8-2a": "${config.ArmArmv82ACflags}", 227*333d2b36SAndroid Build Coastguard Worker } 228*333d2b36SAndroid Build Coastguard Worker 229*333d2b36SAndroid Build Coastguard Worker armCpuVariantCflagsVar = map[string]string{ 230*333d2b36SAndroid Build Coastguard Worker "": "${config.ArmGenericCflags}", 231*333d2b36SAndroid Build Coastguard Worker "cortex-a7": "${config.ArmCortexA7Cflags}", 232*333d2b36SAndroid Build Coastguard Worker "cortex-a8": "${config.ArmCortexA8Cflags}", 233*333d2b36SAndroid Build Coastguard Worker "cortex-a9": "${config.ArmGenericCflags}", 234*333d2b36SAndroid Build Coastguard Worker "cortex-a15": "${config.ArmCortexA15Cflags}", 235*333d2b36SAndroid Build Coastguard Worker "cortex-a32": "${config.ArmCortexA32Cflags}", 236*333d2b36SAndroid Build Coastguard Worker "cortex-a53": "${config.ArmCortexA53Cflags}", 237*333d2b36SAndroid Build Coastguard Worker "cortex-a53.a57": "${config.ArmCortexA53Cflags}", 238*333d2b36SAndroid Build Coastguard Worker "cortex-a55": "${config.ArmCortexA55Cflags}", 239*333d2b36SAndroid Build Coastguard Worker "cortex-a72": "${config.ArmCortexA53Cflags}", 240*333d2b36SAndroid Build Coastguard Worker "cortex-a73": "${config.ArmCortexA53Cflags}", 241*333d2b36SAndroid Build Coastguard Worker "cortex-a75": "${config.ArmCortexA55Cflags}", 242*333d2b36SAndroid Build Coastguard Worker "cortex-a76": "${config.ArmCortexA55Cflags}", 243*333d2b36SAndroid Build Coastguard Worker "krait": "${config.ArmKraitCflags}", 244*333d2b36SAndroid Build Coastguard Worker "kryo": "${config.ArmKryoCflags}", 245*333d2b36SAndroid Build Coastguard Worker "kryo385": "${config.ArmCortexA53Cflags}", 246*333d2b36SAndroid Build Coastguard Worker "exynos-m1": "${config.ArmCortexA53Cflags}", 247*333d2b36SAndroid Build Coastguard Worker "exynos-m2": "${config.ArmCortexA53Cflags}", 248*333d2b36SAndroid Build Coastguard Worker } 249*333d2b36SAndroid Build Coastguard Worker) 250*333d2b36SAndroid Build Coastguard Worker 251*333d2b36SAndroid Build Coastguard Workertype toolchainArm struct { 252*333d2b36SAndroid Build Coastguard Worker toolchainBionic 253*333d2b36SAndroid Build Coastguard Worker toolchain32Bit 254*333d2b36SAndroid Build Coastguard Worker ldflags string 255*333d2b36SAndroid Build Coastguard Worker lldflags string 256*333d2b36SAndroid Build Coastguard Worker toolchainCflags string 257*333d2b36SAndroid Build Coastguard Worker} 258*333d2b36SAndroid Build Coastguard Worker 259*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) Name() string { 260*333d2b36SAndroid Build Coastguard Worker return name 261*333d2b36SAndroid Build Coastguard Worker} 262*333d2b36SAndroid Build Coastguard Worker 263*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) IncludeFlags() string { 264*333d2b36SAndroid Build Coastguard Worker return "" 265*333d2b36SAndroid Build Coastguard Worker} 266*333d2b36SAndroid Build Coastguard Worker 267*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) ClangTriple() string { 268*333d2b36SAndroid Build Coastguard Worker // http://b/72619014 work around llvm LTO bug. 269*333d2b36SAndroid Build Coastguard Worker return clangTriple 270*333d2b36SAndroid Build Coastguard Worker} 271*333d2b36SAndroid Build Coastguard Worker 272*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) ndkTriple() string { 273*333d2b36SAndroid Build Coastguard Worker // Use current NDK include path, while ClangTriple is changed. 274*333d2b36SAndroid Build Coastguard Worker return ndkTriple 275*333d2b36SAndroid Build Coastguard Worker} 276*333d2b36SAndroid Build Coastguard Worker 277*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) ToolchainCflags() string { 278*333d2b36SAndroid Build Coastguard Worker return t.toolchainCflags 279*333d2b36SAndroid Build Coastguard Worker} 280*333d2b36SAndroid Build Coastguard Worker 281*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) Cflags() string { 282*333d2b36SAndroid Build Coastguard Worker return "${config.ArmCflags}" 283*333d2b36SAndroid Build Coastguard Worker} 284*333d2b36SAndroid Build Coastguard Worker 285*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) Cppflags() string { 286*333d2b36SAndroid Build Coastguard Worker return "${config.ArmCppflags}" 287*333d2b36SAndroid Build Coastguard Worker} 288*333d2b36SAndroid Build Coastguard Worker 289*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) Ldflags() string { 290*333d2b36SAndroid Build Coastguard Worker return t.ldflags 291*333d2b36SAndroid Build Coastguard Worker} 292*333d2b36SAndroid Build Coastguard Worker 293*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) Lldflags() string { 294*333d2b36SAndroid Build Coastguard Worker return t.lldflags // TODO: handle V8 cases 295*333d2b36SAndroid Build Coastguard Worker} 296*333d2b36SAndroid Build Coastguard Worker 297*333d2b36SAndroid Build Coastguard Workerfunc (t *toolchainArm) InstructionSetFlags(isa string) (string, error) { 298*333d2b36SAndroid Build Coastguard Worker switch isa { 299*333d2b36SAndroid Build Coastguard Worker case "arm": 300*333d2b36SAndroid Build Coastguard Worker return "${config.ArmArmCflags}", nil 301*333d2b36SAndroid Build Coastguard Worker case "thumb", "": 302*333d2b36SAndroid Build Coastguard Worker return "${config.ArmThumbCflags}", nil 303*333d2b36SAndroid Build Coastguard Worker default: 304*333d2b36SAndroid Build Coastguard Worker return t.toolchainBase.InstructionSetFlags(isa) 305*333d2b36SAndroid Build Coastguard Worker } 306*333d2b36SAndroid Build Coastguard Worker} 307*333d2b36SAndroid Build Coastguard Worker 308*333d2b36SAndroid Build Coastguard Workerfunc (toolchainArm) LibclangRuntimeLibraryArch() string { 309*333d2b36SAndroid Build Coastguard Worker return name 310*333d2b36SAndroid Build Coastguard Worker} 311*333d2b36SAndroid Build Coastguard Worker 312*333d2b36SAndroid Build Coastguard Workerfunc armToolchainFactory(arch android.Arch) Toolchain { 313*333d2b36SAndroid Build Coastguard Worker var fixCortexA8 string 314*333d2b36SAndroid Build Coastguard Worker toolchainCflags := make([]string, 2, 3) 315*333d2b36SAndroid Build Coastguard Worker 316*333d2b36SAndroid Build Coastguard Worker toolchainCflags[0] = "${config.ArmToolchainCflags}" 317*333d2b36SAndroid Build Coastguard Worker toolchainCflags[1] = armArchVariantCflagsVar[arch.ArchVariant] 318*333d2b36SAndroid Build Coastguard Worker 319*333d2b36SAndroid Build Coastguard Worker toolchainCflags = append(toolchainCflags, 320*333d2b36SAndroid Build Coastguard Worker variantOrDefault(armCpuVariantCflagsVar, arch.CpuVariant)) 321*333d2b36SAndroid Build Coastguard Worker 322*333d2b36SAndroid Build Coastguard Worker switch arch.ArchVariant { 323*333d2b36SAndroid Build Coastguard Worker case "armv7-a-neon": 324*333d2b36SAndroid Build Coastguard Worker switch arch.CpuVariant { 325*333d2b36SAndroid Build Coastguard Worker case "cortex-a8", "": 326*333d2b36SAndroid Build Coastguard Worker // Generic ARM might be a Cortex A8 -- better safe than sorry 327*333d2b36SAndroid Build Coastguard Worker fixCortexA8 = "${config.ArmFixCortexA8LdFlags}" 328*333d2b36SAndroid Build Coastguard Worker default: 329*333d2b36SAndroid Build Coastguard Worker fixCortexA8 = "${config.ArmNoFixCortexA8LdFlags}" 330*333d2b36SAndroid Build Coastguard Worker } 331*333d2b36SAndroid Build Coastguard Worker case "armv7-a": 332*333d2b36SAndroid Build Coastguard Worker fixCortexA8 = "${config.ArmFixCortexA8LdFlags}" 333*333d2b36SAndroid Build Coastguard Worker case "armv8-a", "armv8-2a": 334*333d2b36SAndroid Build Coastguard Worker // Nothing extra for armv8-a/armv8-2a 335*333d2b36SAndroid Build Coastguard Worker default: 336*333d2b36SAndroid Build Coastguard Worker panic(fmt.Sprintf("Unknown ARM architecture version: %q", arch.ArchVariant)) 337*333d2b36SAndroid Build Coastguard Worker } 338*333d2b36SAndroid Build Coastguard Worker 339*333d2b36SAndroid Build Coastguard Worker return &toolchainArm{ 340*333d2b36SAndroid Build Coastguard Worker ldflags: strings.Join([]string{ 341*333d2b36SAndroid Build Coastguard Worker "${config.ArmLdflags}", 342*333d2b36SAndroid Build Coastguard Worker fixCortexA8, 343*333d2b36SAndroid Build Coastguard Worker }, " "), 344*333d2b36SAndroid Build Coastguard Worker lldflags: "${config.ArmLldflags}", 345*333d2b36SAndroid Build Coastguard Worker toolchainCflags: strings.Join(toolchainCflags, " "), 346*333d2b36SAndroid Build Coastguard Worker } 347*333d2b36SAndroid Build Coastguard Worker} 348*333d2b36SAndroid Build Coastguard Worker 349*333d2b36SAndroid Build Coastguard Workerfunc init() { 350*333d2b36SAndroid Build Coastguard Worker registerToolchainFactory(android.Android, android.Arm, armToolchainFactory) 351*333d2b36SAndroid Build Coastguard Worker} 352