blob: 8b7bae3f285cececb5be8f42db78ea036abe229a [file] [log] [blame]
Colin Cross023f1e82015-11-23 16:15:10 -08001// Copyright 2015 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
Colin Crossb98c8b02016-07-29 13:44:28 -070015package config
Colin Cross023f1e82015-11-23 16:15:10 -080016
17import (
18 "strings"
19
Colin Cross635c3b02016-05-18 15:37:25 -070020 "android/soong/android"
Colin Cross023f1e82015-11-23 16:15:10 -080021)
22
23var (
24 mipsCflags = []string{
Colin Cross023f1e82015-11-23 16:15:10 -080025 "-Umips",
Colin Cross023f1e82015-11-23 16:15:10 -080026 }
27
Dan Willemsenc785ff32016-05-09 13:34:35 -070028 mipsClangCflags = append(mipsCflags, []string{
29 "-fPIC",
Yi Kong5cf39482017-04-21 11:47:16 -070030 "-fintegrated-as",
Dan Willemsenc785ff32016-05-09 13:34:35 -070031 }...)
32
Colin Cross26f14502017-11-06 13:59:48 -080033 mipsCppflags = []string{}
Colin Cross023f1e82015-11-23 16:15:10 -080034
35 mipsLdflags = []string{
Colin Cross023f1e82015-11-23 16:15:10 -080036 "-Wl,--allow-shlib-undefined",
37 }
38
39 mipsToolchainLdflags = []string{
40 "-Wl,-melf32ltsmip",
41 }
42
43 mipsArchVariantCflags = map[string][]string{
44 "mips32-fp": []string{
45 "-mips32",
46 "-mfp32",
47 "-modd-spreg",
48 "-mno-synci",
49 },
50 "mips32r2-fp": []string{
51 "-mips32r2",
52 "-mfp32",
53 "-modd-spreg",
Dan Willemsenc785ff32016-05-09 13:34:35 -070054 "-msynci",
Colin Cross023f1e82015-11-23 16:15:10 -080055 },
56 "mips32r2-fp-xburst": []string{
57 "-mips32r2",
58 "-mfp32",
59 "-modd-spreg",
60 "-mno-fused-madd",
Colin Cross023f1e82015-11-23 16:15:10 -080061 "-mno-synci",
62 },
63 "mips32r2dsp-fp": []string{
64 "-mips32r2",
65 "-mfp32",
66 "-modd-spreg",
67 "-mdsp",
68 "-msynci",
69 },
70 "mips32r2dspr2-fp": []string{
71 "-mips32r2",
72 "-mfp32",
73 "-modd-spreg",
74 "-mdspr2",
75 "-msynci",
76 },
77 "mips32r6": []string{
78 "-mips32r6",
79 "-mfp64",
80 "-mno-odd-spreg",
81 "-msynci",
82 },
83 }
84)
85
Dan Willemsen34fc3b12015-12-07 12:30:44 -080086const (
87 mipsGccVersion = "4.9"
88)
89
Colin Cross023f1e82015-11-23 16:15:10 -080090func init() {
Dan Willemsenb1957a52016-06-23 23:44:54 -070091 android.RegisterArchVariants(android.Mips,
92 "mips32_fp",
93 "mips32r2_fp",
94 "mips32r2_fp_xburst",
95 "mips32r2dsp_fp",
96 "mips32r2dspr2_fp",
97 "mips32r6")
Colin Cross0906f172017-04-26 14:00:43 -070098 android.RegisterArchFeatures(android.Mips,
99 "dspr2",
Colin Cross432c2862017-05-01 16:43:41 -0700100 "rev6",
101 "msa")
Colin Cross0906f172017-04-26 14:00:43 -0700102 android.RegisterArchVariantFeatures(android.Mips, "mips32r2dspr2_fp",
103 "dspr2")
Dan Willemsenb1957a52016-06-23 23:44:54 -0700104 android.RegisterArchVariantFeatures(android.Mips, "mips32r6",
Colin Cross023f1e82015-11-23 16:15:10 -0800105 "rev6")
106
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800107 pctx.StaticVariable("mipsGccVersion", mipsGccVersion)
Colin Cross023f1e82015-11-23 16:15:10 -0800108
Colin Crossb98c8b02016-07-29 13:44:28 -0700109 pctx.SourcePathVariable("MipsGccRoot",
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800110 "prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mipsGccVersion}")
Colin Cross023f1e82015-11-23 16:15:10 -0800111
Colin Crossb98c8b02016-07-29 13:44:28 -0700112 pctx.StaticVariable("MipsToolchainLdflags", strings.Join(mipsToolchainLdflags, " "))
113 pctx.StaticVariable("MipsCflags", strings.Join(mipsCflags, " "))
114 pctx.StaticVariable("MipsLdflags", strings.Join(mipsLdflags, " "))
115 pctx.StaticVariable("MipsCppflags", strings.Join(mipsCppflags, " "))
Elliott Hughesde28deb2017-10-12 09:07:53 -0700116 pctx.StaticVariable("MipsIncludeFlags", bionicHeaders("mips"))
Colin Cross023f1e82015-11-23 16:15:10 -0800117
118 // Clang cflags
Colin Crossb98c8b02016-07-29 13:44:28 -0700119 pctx.StaticVariable("MipsClangCflags", strings.Join(ClangFilterUnknownCflags(mipsClangCflags), " "))
120 pctx.StaticVariable("MipsClangLdflags", strings.Join(ClangFilterUnknownCflags(mipsLdflags), " "))
121 pctx.StaticVariable("MipsClangCppflags", strings.Join(ClangFilterUnknownCflags(mipsCppflags), " "))
Colin Cross023f1e82015-11-23 16:15:10 -0800122
123 // Extended cflags
124
125 // Architecture variant cflags
126 for variant, cflags := range mipsArchVariantCflags {
Colin Crossb98c8b02016-07-29 13:44:28 -0700127 pctx.StaticVariable("Mips"+variant+"VariantCflags", strings.Join(cflags, " "))
128 pctx.StaticVariable("Mips"+variant+"VariantClangCflags",
129 strings.Join(ClangFilterUnknownCflags(cflags), " "))
Colin Cross023f1e82015-11-23 16:15:10 -0800130 }
131}
132
133type toolchainMips struct {
134 toolchain32Bit
135 cflags, clangCflags string
136 toolchainCflags, toolchainClangCflags string
137}
138
139func (t *toolchainMips) Name() string {
140 return "mips"
141}
142
143func (t *toolchainMips) GccRoot() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700144 return "${config.MipsGccRoot}"
Colin Cross023f1e82015-11-23 16:15:10 -0800145}
146
147func (t *toolchainMips) GccTriple() string {
Dan Albert84f431f2016-07-20 14:44:26 -0700148 return "mips64el-linux-android"
Colin Cross023f1e82015-11-23 16:15:10 -0800149}
150
151func (t *toolchainMips) GccVersion() string {
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800152 return mipsGccVersion
Colin Cross023f1e82015-11-23 16:15:10 -0800153}
154
155func (t *toolchainMips) ToolchainLdflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700156 return "${config.MipsToolchainLdflags}"
Colin Cross023f1e82015-11-23 16:15:10 -0800157}
158
159func (t *toolchainMips) ToolchainCflags() string {
160 return t.toolchainCflags
161}
162
163func (t *toolchainMips) Cflags() string {
164 return t.cflags
165}
166
167func (t *toolchainMips) Cppflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700168 return "${config.MipsCppflags}"
Colin Cross023f1e82015-11-23 16:15:10 -0800169}
170
171func (t *toolchainMips) Ldflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700172 return "${config.MipsLdflags}"
Colin Cross023f1e82015-11-23 16:15:10 -0800173}
174
175func (t *toolchainMips) IncludeFlags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700176 return "${config.MipsIncludeFlags}"
Colin Cross023f1e82015-11-23 16:15:10 -0800177}
178
179func (t *toolchainMips) ClangTriple() string {
Dan Albert84f431f2016-07-20 14:44:26 -0700180 return "mipsel-linux-android"
Colin Cross023f1e82015-11-23 16:15:10 -0800181}
182
Dan Willemsenc785ff32016-05-09 13:34:35 -0700183func (t *toolchainMips) ToolchainClangLdflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700184 return "${config.MipsToolchainLdflags}"
Dan Willemsenc785ff32016-05-09 13:34:35 -0700185}
186
Colin Cross023f1e82015-11-23 16:15:10 -0800187func (t *toolchainMips) ToolchainClangCflags() string {
188 return t.toolchainClangCflags
189}
190
Dan Willemsen32968a22016-01-12 22:25:34 -0800191func (t *toolchainMips) ClangAsflags() string {
Pirama Arumuga Nainar58e2dcd2016-06-29 17:09:30 -0700192 return "-fPIC -fno-integrated-as"
Dan Willemsen32968a22016-01-12 22:25:34 -0800193}
194
Colin Cross023f1e82015-11-23 16:15:10 -0800195func (t *toolchainMips) ClangCflags() string {
196 return t.clangCflags
197}
198
199func (t *toolchainMips) ClangCppflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700200 return "${config.MipsClangCppflags}"
Colin Cross023f1e82015-11-23 16:15:10 -0800201}
202
203func (t *toolchainMips) ClangLdflags() string {
Colin Crossb98c8b02016-07-29 13:44:28 -0700204 return "${config.MipsClangLdflags}"
Colin Cross023f1e82015-11-23 16:15:10 -0800205}
206
Evgenii Stepanovaf36db12016-08-15 14:18:24 -0700207func (toolchainMips) SanitizerRuntimeLibraryArch() string {
208 return "mips"
Colin Crossd87145f2016-05-19 22:43:46 -0700209}
210
Colin Cross635c3b02016-05-18 15:37:25 -0700211func mipsToolchainFactory(arch android.Arch) Toolchain {
Colin Cross023f1e82015-11-23 16:15:10 -0800212 return &toolchainMips{
Colin Crossb98c8b02016-07-29 13:44:28 -0700213 cflags: "${config.MipsCflags}",
214 clangCflags: "${config.MipsClangCflags}",
215 toolchainCflags: "${config.Mips" + arch.ArchVariant + "VariantCflags}",
216 toolchainClangCflags: "${config.Mips" + arch.ArchVariant + "VariantClangCflags}",
Colin Cross023f1e82015-11-23 16:15:10 -0800217 }
218}
219
220func init() {
Colin Crossa1ad8d12016-06-01 17:09:44 -0700221 registerToolchainFactory(android.Android, android.Mips, mipsToolchainFactory)
Colin Cross023f1e82015-11-23 16:15:10 -0800222}