blob: 754b276c121d9734112709ce69a194d06424c63e [file] [log] [blame]
Colin Cross3f40fa42015-01-30 17:27:36 -08001package cc
2
3import (
4 "strings"
5
6 "android/soong/common"
7)
8
9var (
10 arm64Cflags = []string{
11 "-fno-exceptions", // from build/core/combo/select.mk
12 "-Wno-multichar", // from build/core/combo/select.mk
13 "-fno-strict-aliasing",
14 "-fstack-protector",
15 "-ffunction-sections",
16 "-fdata-sections",
17 "-funwind-tables",
18 "-Wa,--noexecstack",
19 "-Werror=format-security",
20 "-D_FORTIFY_SOURCE=2",
21 "-fno-short-enums",
22 "-no-canonical-prefixes",
23 "-fno-canonical-system-headers",
Colin Cross3f40fa42015-01-30 17:27:36 -080024
25 // Help catch common 32/64-bit errors.
26 "-Werror=pointer-to-int-cast",
27 "-Werror=int-to-pointer-cast",
28
29 "-fno-strict-volatile-bitfields",
30
31 // TARGET_RELEASE_CFLAGS
32 "-DNDEBUG",
33 "-O2 -g",
34 "-Wstrict-aliasing=2",
35 "-fgcse-after-reload",
36 "-frerun-cse-after-loop",
37 "-frename-registers",
38 }
39
40 arm64Ldflags = []string{
41 "-Wl,-z,noexecstack",
42 "-Wl,-z,relro",
43 "-Wl,-z,now",
44 "-Wl,--build-id=md5",
45 "-Wl,--warn-shared-textrel",
46 "-Wl,--fatal-warnings",
47 "-Wl,-maarch64linux",
48 "-Wl,--hash-style=gnu",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070049 "-Wl,--fix-cortex-a53-843419",
Colin Cross3f40fa42015-01-30 17:27:36 -080050
51 // Disable transitive dependency library symbol resolving.
52 "-Wl,--allow-shlib-undefined",
53 }
54
55 arm64Cppflags = []string{
56 "-fvisibility-inlines-hidden",
57 }
58)
59
60func init() {
61 pctx.StaticVariable("arm64GccVersion", "4.9")
62
63 pctx.StaticVariable("arm64GccRoot",
Dan Willemsen87b17d12015-07-14 00:39:06 -070064 "prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}")
Colin Cross3f40fa42015-01-30 17:27:36 -080065
66 pctx.StaticVariable("arm64GccTriple", "aarch64-linux-android")
67
68 pctx.StaticVariable("arm64Cflags", strings.Join(arm64Cflags, " "))
69 pctx.StaticVariable("arm64Ldflags", strings.Join(arm64Ldflags, " "))
70 pctx.StaticVariable("arm64Cppflags", strings.Join(arm64Cppflags, " "))
71 pctx.StaticVariable("arm64IncludeFlags", strings.Join([]string{
72 "-isystem ${LibcRoot}/arch-arm64/include",
73 "-isystem ${LibcRoot}/include",
74 "-isystem ${LibcRoot}/kernel/uapi",
75 "-isystem ${LibcRoot}/kernel/uapi/asm-arm64",
76 "-isystem ${LibmRoot}/include",
77 "-isystem ${LibmRoot}/include/arm64",
78 }, " "))
79
80 pctx.StaticVariable("arm64ClangCflags", strings.Join(clangFilterUnknownCflags(arm64Cflags), " "))
81 pctx.StaticVariable("arm64ClangLdflags", strings.Join(clangFilterUnknownCflags(arm64Ldflags), " "))
82 pctx.StaticVariable("arm64ClangCppflags", strings.Join(clangFilterUnknownCflags(arm64Cppflags), " "))
83}
84
85type toolchainArm64 struct {
86 toolchain64Bit
87}
88
89var toolchainArm64Singleton = &toolchainArm64{}
90
Dan Albertbe961682015-03-18 23:38:50 -070091func (t *toolchainArm64) Name() string {
92 return "arm64"
93}
94
Colin Cross3f40fa42015-01-30 17:27:36 -080095func (t *toolchainArm64) GccRoot() string {
96 return "${arm64GccRoot}"
97}
98
99func (t *toolchainArm64) GccTriple() string {
100 return "${arm64GccTriple}"
101}
102
Dan Albertbe961682015-03-18 23:38:50 -0700103func (t *toolchainArm64) GccVersion() string {
104 return "${arm64GccVersion}"
105}
106
Colin Cross3f40fa42015-01-30 17:27:36 -0800107func (t *toolchainArm64) Cflags() string {
Colin Cross28344522015-04-22 13:07:53 -0700108 return "${arm64Cflags}"
Colin Cross3f40fa42015-01-30 17:27:36 -0800109}
110
111func (t *toolchainArm64) Cppflags() string {
112 return "${arm64Cppflags}"
113}
114
115func (t *toolchainArm64) Ldflags() string {
116 return "${arm64Ldflags}"
117}
118
119func (t *toolchainArm64) IncludeFlags() string {
120 return "${arm64IncludeFlags}"
121}
122
123func (t *toolchainArm64) ClangTriple() string {
124 return "${arm64GccTriple}"
125}
126
127func (t *toolchainArm64) ClangCflags() string {
128 return "${arm64ClangCflags}"
129}
130
131func (t *toolchainArm64) ClangCppflags() string {
132 return "${arm64ClangCppflags}"
133}
134
135func (t *toolchainArm64) ClangLdflags() string {
136 return "${arm64Ldflags}"
137}
138
Colin Crossc5c24ad2015-11-20 15:35:00 -0800139func arm64ToolchainFactory(arch common.Arch) Toolchain {
Colin Cross3f40fa42015-01-30 17:27:36 -0800140 return toolchainArm64Singleton
141}
142
143func init() {
144 registerToolchainFactory(common.Device, common.Arm64, arm64ToolchainFactory)
145}