arm64_device.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package cc
  2. import (
  3. "strings"
  4. "android/soong/common"
  5. )
  6. var (
  7. arm64Cflags = []string{
  8. "-fno-exceptions", // from build/core/combo/select.mk
  9. "-Wno-multichar", // from build/core/combo/select.mk
  10. "-fno-strict-aliasing",
  11. "-fstack-protector",
  12. "-ffunction-sections",
  13. "-fdata-sections",
  14. "-funwind-tables",
  15. "-Wa,--noexecstack",
  16. "-Werror=format-security",
  17. "-D_FORTIFY_SOURCE=2",
  18. "-fno-short-enums",
  19. "-no-canonical-prefixes",
  20. "-fno-canonical-system-headers",
  21. // Help catch common 32/64-bit errors.
  22. "-Werror=pointer-to-int-cast",
  23. "-Werror=int-to-pointer-cast",
  24. "-fno-strict-volatile-bitfields",
  25. // TARGET_RELEASE_CFLAGS
  26. "-DNDEBUG",
  27. "-O2 -g",
  28. "-Wstrict-aliasing=2",
  29. "-fgcse-after-reload",
  30. "-frerun-cse-after-loop",
  31. "-frename-registers",
  32. }
  33. arm64Ldflags = []string{
  34. "-Wl,-z,noexecstack",
  35. "-Wl,-z,relro",
  36. "-Wl,-z,now",
  37. "-Wl,--build-id=md5",
  38. "-Wl,--warn-shared-textrel",
  39. "-Wl,--fatal-warnings",
  40. "-Wl,-maarch64linux",
  41. "-Wl,--hash-style=gnu",
  42. "-Wl,--fix-cortex-a53-843419",
  43. // Disable transitive dependency library symbol resolving.
  44. "-Wl,--allow-shlib-undefined",
  45. }
  46. arm64Cppflags = []string{
  47. "-fvisibility-inlines-hidden",
  48. }
  49. )
  50. func init() {
  51. pctx.StaticVariable("arm64GccVersion", "4.9")
  52. pctx.StaticVariable("arm64GccRoot",
  53. "prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}")
  54. pctx.StaticVariable("arm64GccTriple", "aarch64-linux-android")
  55. pctx.StaticVariable("arm64Cflags", strings.Join(arm64Cflags, " "))
  56. pctx.StaticVariable("arm64Ldflags", strings.Join(arm64Ldflags, " "))
  57. pctx.StaticVariable("arm64Cppflags", strings.Join(arm64Cppflags, " "))
  58. pctx.StaticVariable("arm64IncludeFlags", strings.Join([]string{
  59. "-isystem ${LibcRoot}/arch-arm64/include",
  60. "-isystem ${LibcRoot}/include",
  61. "-isystem ${LibcRoot}/kernel/uapi",
  62. "-isystem ${LibcRoot}/kernel/uapi/asm-arm64",
  63. "-isystem ${LibmRoot}/include",
  64. "-isystem ${LibmRoot}/include/arm64",
  65. }, " "))
  66. pctx.StaticVariable("arm64ClangCflags", strings.Join(clangFilterUnknownCflags(arm64Cflags), " "))
  67. pctx.StaticVariable("arm64ClangLdflags", strings.Join(clangFilterUnknownCflags(arm64Ldflags), " "))
  68. pctx.StaticVariable("arm64ClangCppflags", strings.Join(clangFilterUnknownCflags(arm64Cppflags), " "))
  69. }
  70. type toolchainArm64 struct {
  71. toolchain64Bit
  72. }
  73. var toolchainArm64Singleton = &toolchainArm64{}
  74. func (t *toolchainArm64) Name() string {
  75. return "arm64"
  76. }
  77. func (t *toolchainArm64) GccRoot() string {
  78. return "${arm64GccRoot}"
  79. }
  80. func (t *toolchainArm64) GccTriple() string {
  81. return "${arm64GccTriple}"
  82. }
  83. func (t *toolchainArm64) GccVersion() string {
  84. return "${arm64GccVersion}"
  85. }
  86. func (t *toolchainArm64) Cflags() string {
  87. return "${arm64Cflags}"
  88. }
  89. func (t *toolchainArm64) Cppflags() string {
  90. return "${arm64Cppflags}"
  91. }
  92. func (t *toolchainArm64) Ldflags() string {
  93. return "${arm64Ldflags}"
  94. }
  95. func (t *toolchainArm64) IncludeFlags() string {
  96. return "${arm64IncludeFlags}"
  97. }
  98. func (t *toolchainArm64) ClangTriple() string {
  99. return "${arm64GccTriple}"
  100. }
  101. func (t *toolchainArm64) ClangCflags() string {
  102. return "${arm64ClangCflags}"
  103. }
  104. func (t *toolchainArm64) ClangCppflags() string {
  105. return "${arm64ClangCppflags}"
  106. }
  107. func (t *toolchainArm64) ClangLdflags() string {
  108. return "${arm64Ldflags}"
  109. }
  110. func arm64ToolchainFactory(archVariant string, cpuVariant string) Toolchain {
  111. return toolchainArm64Singleton
  112. }
  113. func init() {
  114. registerToolchainFactory(common.Device, common.Arm64, arm64ToolchainFactory)
  115. }