xref: /aosp_15_r20/build/soong/cc/config/arm_device.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
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