mips_device.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // 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. package config
  15. import (
  16. "strings"
  17. "android/soong/android"
  18. )
  19. var (
  20. mipsCflags = []string{
  21. "-fomit-frame-pointer",
  22. "-Umips",
  23. }
  24. mipsClangCflags = append(mipsCflags, []string{
  25. "-fPIC",
  26. "-fintegrated-as",
  27. }...)
  28. mipsCppflags = []string{}
  29. mipsLdflags = []string{
  30. "-Wl,--allow-shlib-undefined",
  31. }
  32. mipsToolchainLdflags = []string{
  33. "-Wl,-melf32ltsmip",
  34. }
  35. mipsArchVariantCflags = map[string][]string{
  36. "mips32-fp": []string{
  37. "-mips32",
  38. "-mfp32",
  39. "-modd-spreg",
  40. "-mno-synci",
  41. },
  42. "mips32r2-fp": []string{
  43. "-mips32r2",
  44. "-mfp32",
  45. "-modd-spreg",
  46. "-msynci",
  47. },
  48. "mips32r2-fp-xburst": []string{
  49. "-mips32r2",
  50. "-mfp32",
  51. "-modd-spreg",
  52. "-mno-fused-madd",
  53. "-mno-synci",
  54. },
  55. "mips32r2dsp-fp": []string{
  56. "-mips32r2",
  57. "-mfp32",
  58. "-modd-spreg",
  59. "-mdsp",
  60. "-msynci",
  61. },
  62. "mips32r2dspr2-fp": []string{
  63. "-mips32r2",
  64. "-mfp32",
  65. "-modd-spreg",
  66. "-mdspr2",
  67. "-msynci",
  68. },
  69. "mips32r6": []string{
  70. "-mips32r6",
  71. "-mfp64",
  72. "-mno-odd-spreg",
  73. "-msynci",
  74. },
  75. }
  76. )
  77. const (
  78. mipsGccVersion = "4.9"
  79. )
  80. func init() {
  81. pctx.StaticVariable("mipsGccVersion", mipsGccVersion)
  82. pctx.SourcePathVariable("MipsGccRoot",
  83. "prebuilts/gcc/${HostPrebuiltTag}/mips/mips64el-linux-android-${mipsGccVersion}")
  84. pctx.StaticVariable("MipsToolchainLdflags", strings.Join(mipsToolchainLdflags, " "))
  85. pctx.StaticVariable("MipsIncludeFlags", bionicHeaders("mips"))
  86. // Clang cflags
  87. pctx.StaticVariable("MipsClangCflags", strings.Join(ClangFilterUnknownCflags(mipsClangCflags), " "))
  88. pctx.StaticVariable("MipsClangLdflags", strings.Join(ClangFilterUnknownCflags(mipsLdflags), " "))
  89. pctx.StaticVariable("MipsClangCppflags", strings.Join(ClangFilterUnknownCflags(mipsCppflags), " "))
  90. // Extended cflags
  91. // Architecture variant cflags
  92. for variant, cflags := range mipsArchVariantCflags {
  93. pctx.StaticVariable("Mips"+variant+"VariantClangCflags",
  94. strings.Join(ClangFilterUnknownCflags(cflags), " "))
  95. }
  96. }
  97. type toolchainMips struct {
  98. toolchain32Bit
  99. clangCflags string
  100. toolchainClangCflags string
  101. }
  102. func (t *toolchainMips) Name() string {
  103. return "mips"
  104. }
  105. func (t *toolchainMips) GccRoot() string {
  106. return "${config.MipsGccRoot}"
  107. }
  108. func (t *toolchainMips) GccTriple() string {
  109. return "mips64el-linux-android"
  110. }
  111. func (t *toolchainMips) GccVersion() string {
  112. return mipsGccVersion
  113. }
  114. func (t *toolchainMips) IncludeFlags() string {
  115. return "${config.MipsIncludeFlags}"
  116. }
  117. func (t *toolchainMips) ClangTriple() string {
  118. return "mipsel-linux-android"
  119. }
  120. func (t *toolchainMips) ToolchainClangLdflags() string {
  121. return "${config.MipsToolchainLdflags}"
  122. }
  123. func (t *toolchainMips) ToolchainClangCflags() string {
  124. return t.toolchainClangCflags
  125. }
  126. func (t *toolchainMips) ClangAsflags() string {
  127. return "-fPIC -fno-integrated-as"
  128. }
  129. func (t *toolchainMips) ClangCflags() string {
  130. return t.clangCflags
  131. }
  132. func (t *toolchainMips) ClangCppflags() string {
  133. return "${config.MipsClangCppflags}"
  134. }
  135. func (t *toolchainMips) ClangLdflags() string {
  136. return "${config.MipsClangLdflags}"
  137. }
  138. func (t *toolchainMips) ClangLldflags() string {
  139. // TODO: define and use MipsClangLldflags
  140. return "${config.MipsClangLdflags}"
  141. }
  142. func (toolchainMips) LibclangRuntimeLibraryArch() string {
  143. return "mips"
  144. }
  145. func mipsToolchainFactory(arch android.Arch) Toolchain {
  146. return &toolchainMips{
  147. clangCflags: "${config.MipsClangCflags}",
  148. toolchainClangCflags: "${config.Mips" + arch.ArchVariant + "VariantClangCflags}",
  149. }
  150. }
  151. func init() {
  152. registerToolchainFactory(android.Android, android.Mips, mipsToolchainFactory)
  153. }