blob: e7c7bc4668a3cf85c8c4bf7f410fdffc3d6a88f9 [file] [log] [blame]
Colin Crossa9b2aac2022-06-15 17:25:51 -07001// Copyright 2022 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package config
16
Cole Faust8982b1c2024-04-08 16:54:45 -070017import (
18 "android/soong/android"
19 "strings"
20)
Colin Crossa9b2aac2022-06-15 17:25:51 -070021
22var (
23 linuxArmCflags = []string{
24 "-march=armv7a",
25 }
26
27 linuxArm64Cflags = []string{}
28
29 linuxArmLdflags = []string{
30 "-march=armv7a",
31 }
32
Eric Rahm19524712023-10-20 15:56:27 +000033 linuxArmLldflags = append(linuxArmLdflags,
34 "-Wl,--compress-debug-sections=zstd",
35 )
36
Colin Crossa9b2aac2022-06-15 17:25:51 -070037 linuxArm64Ldflags = []string{}
Eric Rahm19524712023-10-20 15:56:27 +000038
39 linuxArm64Lldflags = append(linuxArm64Ldflags,
40 "-Wl,--compress-debug-sections=zstd",
41 )
Colin Crossa9b2aac2022-06-15 17:25:51 -070042)
43
44func init() {
Cole Faust8982b1c2024-04-08 16:54:45 -070045 pctx.StaticVariable("LinuxArmCflags", strings.Join(linuxArmCflags, " "))
46 pctx.StaticVariable("LinuxArm64Cflags", strings.Join(linuxArm64Cflags, " "))
47 pctx.StaticVariable("LinuxArmLdflags", strings.Join(linuxArmLdflags, " "))
48 pctx.StaticVariable("LinuxArmLldflags", strings.Join(linuxArmLldflags, " "))
49 pctx.StaticVariable("LinuxArm64Ldflags", strings.Join(linuxArm64Ldflags, " "))
50 pctx.StaticVariable("LinuxArm64Lldflags", strings.Join(linuxArm64Lldflags, " "))
Colin Crossa9b2aac2022-06-15 17:25:51 -070051
Cole Faust8982b1c2024-04-08 16:54:45 -070052 pctx.StaticVariable("LinuxArmYasmFlags", "-f elf32 -m arm")
53 pctx.StaticVariable("LinuxArm64YasmFlags", "-f elf64 -m aarch64")
Colin Crossa9b2aac2022-06-15 17:25:51 -070054
55}
56
57// Musl arm+arm64
58type toolchainLinuxArm struct {
59 toolchain32Bit
60 toolchainLinux
61}
62
63type toolchainLinuxArm64 struct {
64 toolchain64Bit
65 toolchainLinux
66}
67
68func (t *toolchainLinuxArm) Name() string {
69 return "arm"
70}
71
72func (t *toolchainLinuxArm64) Name() string {
73 return "arm64"
74}
75
76func (t *toolchainLinuxArm) Cflags() string {
77 return "${config.LinuxCflags} ${config.LinuxArmCflags}"
78}
79
80func (t *toolchainLinuxArm) Cppflags() string {
81 return ""
82}
83
84func (t *toolchainLinuxArm64) Cflags() string {
85 return "${config.LinuxCflags} ${config.LinuxArm64Cflags}"
86}
87
88func (t *toolchainLinuxArm64) Cppflags() string {
89 return ""
90}
91
92func (t *toolchainLinuxArm) Ldflags() string {
93 return "${config.LinuxLdflags} ${config.LinuxArmLdflags}"
94}
95
96func (t *toolchainLinuxArm) Lldflags() string {
97 return "${config.LinuxLldflags} ${config.LinuxArmLldflags}"
98}
99
100func (t *toolchainLinuxArm64) Ldflags() string {
101 return "${config.LinuxLdflags} ${config.LinuxArm64Ldflags}"
102}
103
104func (t *toolchainLinuxArm64) Lldflags() string {
105 return "${config.LinuxLldflags} ${config.LinuxArm64Lldflags}"
106}
107
108func (t *toolchainLinuxArm) YasmFlags() string {
109 return "${config.LinuxArmYasmFlags}"
110}
111
112func (t *toolchainLinuxArm64) YasmFlags() string {
113 return "${config.LinuxArm64YasmFlags}"
114}
115
116func (toolchainLinuxArm) LibclangRuntimeLibraryArch() string {
117 return "arm"
118}
119
120func (toolchainLinuxArm64) LibclangRuntimeLibraryArch() string {
121 return "arm64"
122}
123
124func (t *toolchainLinuxArm) InstructionSetFlags(isa string) (string, error) {
125 // TODO: Is no thumb OK?
126 return t.toolchainBase.InstructionSetFlags("")
127}
128
129type toolchainLinuxMuslArm struct {
130 toolchainLinuxArm
131 toolchainMusl
132}
133
134type toolchainLinuxMuslArm64 struct {
135 toolchainLinuxArm64
136 toolchainMusl
137}
138
139func (t *toolchainLinuxMuslArm) ClangTriple() string {
140 return "arm-linux-musleabihf"
141}
142
143func (t *toolchainLinuxMuslArm) Cflags() string {
144 return t.toolchainLinuxArm.Cflags() + " " + t.toolchainMusl.Cflags()
145}
146
147func (t *toolchainLinuxMuslArm) Ldflags() string {
148 return t.toolchainLinuxArm.Ldflags() + " " + t.toolchainMusl.Ldflags()
149}
150
151func (t *toolchainLinuxMuslArm) Lldflags() string {
152 return t.toolchainLinuxArm.Lldflags() + " " + t.toolchainMusl.Lldflags()
153}
154
155func (t *toolchainLinuxMuslArm64) ClangTriple() string {
156 return "aarch64-linux-musl"
157}
158
159func (t *toolchainLinuxMuslArm64) Cflags() string {
160 return t.toolchainLinuxArm64.Cflags() + " " + t.toolchainMusl.Cflags()
161}
162
163func (t *toolchainLinuxMuslArm64) Ldflags() string {
164 return t.toolchainLinuxArm64.Ldflags() + " " + t.toolchainMusl.Ldflags()
165}
166
167func (t *toolchainLinuxMuslArm64) Lldflags() string {
168 return t.toolchainLinuxArm64.Lldflags() + " " + t.toolchainMusl.Lldflags()
169}
170
171var toolchainLinuxMuslArmSingleton Toolchain = &toolchainLinuxMuslArm{}
172var toolchainLinuxMuslArm64Singleton Toolchain = &toolchainLinuxMuslArm64{}
173
174func linuxMuslArmToolchainFactory(arch android.Arch) Toolchain {
175 return toolchainLinuxMuslArmSingleton
176}
177
178func linuxMuslArm64ToolchainFactory(arch android.Arch) Toolchain {
179 return toolchainLinuxMuslArm64Singleton
180}
181
182func init() {
183 registerToolchainFactory(android.LinuxMusl, android.Arm, linuxMuslArmToolchainFactory)
184 registerToolchainFactory(android.LinuxMusl, android.Arm64, linuxMuslArm64ToolchainFactory)
185}