blob: c8614983ddedbf2e9f59a7176f3ac34807d7757b [file] [log] [blame]
Colin Crossb0cba6a2015-11-20 15:35:26 -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 Cross3f40fa42015-01-30 17:27:36 -080015package cc
16
17import (
18 "strings"
19
20 "android/soong/common"
21)
22
23var (
24 arm64Cflags = []string{
25 "-fno-exceptions", // from build/core/combo/select.mk
26 "-Wno-multichar", // from build/core/combo/select.mk
27 "-fno-strict-aliasing",
Dan Willemsen7a0f8482016-01-12 16:22:40 -080028 "-fstack-protector-strong",
Colin Cross3f40fa42015-01-30 17:27:36 -080029 "-ffunction-sections",
30 "-fdata-sections",
31 "-funwind-tables",
32 "-Wa,--noexecstack",
33 "-Werror=format-security",
34 "-D_FORTIFY_SOURCE=2",
35 "-fno-short-enums",
36 "-no-canonical-prefixes",
37 "-fno-canonical-system-headers",
Colin Cross3f40fa42015-01-30 17:27:36 -080038
39 // Help catch common 32/64-bit errors.
40 "-Werror=pointer-to-int-cast",
41 "-Werror=int-to-pointer-cast",
42
43 "-fno-strict-volatile-bitfields",
44
45 // TARGET_RELEASE_CFLAGS
46 "-DNDEBUG",
47 "-O2 -g",
48 "-Wstrict-aliasing=2",
49 "-fgcse-after-reload",
50 "-frerun-cse-after-loop",
51 "-frename-registers",
52 }
53
54 arm64Ldflags = []string{
55 "-Wl,-z,noexecstack",
56 "-Wl,-z,relro",
57 "-Wl,-z,now",
58 "-Wl,--build-id=md5",
59 "-Wl,--warn-shared-textrel",
60 "-Wl,--fatal-warnings",
61 "-Wl,-maarch64linux",
62 "-Wl,--hash-style=gnu",
Dan Willemsen3bf6b472015-09-11 17:41:10 -070063 "-Wl,--fix-cortex-a53-843419",
Dan Willemsen7a0f8482016-01-12 16:22:40 -080064 "-fuse-ld=gold",
65 "-Wl,--icf=safe",
Dan Willemsenc7e45972015-12-09 13:05:28 -080066 "-Wl,--no-undefined-version",
Colin Cross3f40fa42015-01-30 17:27:36 -080067
68 // Disable transitive dependency library symbol resolving.
69 "-Wl,--allow-shlib-undefined",
70 }
71
72 arm64Cppflags = []string{
73 "-fvisibility-inlines-hidden",
74 }
75)
76
Dan Willemsen34fc3b12015-12-07 12:30:44 -080077const (
78 arm64GccVersion = "4.9"
79)
80
Colin Cross3f40fa42015-01-30 17:27:36 -080081func init() {
Dan Willemsen34fc3b12015-12-07 12:30:44 -080082 pctx.StaticVariable("arm64GccVersion", arm64GccVersion)
Colin Cross3f40fa42015-01-30 17:27:36 -080083
Dan Willemsen34cc69e2015-09-23 15:26:20 -070084 pctx.SourcePathVariable("arm64GccRoot",
Dan Willemsen87b17d12015-07-14 00:39:06 -070085 "prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}")
Colin Cross3f40fa42015-01-30 17:27:36 -080086
87 pctx.StaticVariable("arm64GccTriple", "aarch64-linux-android")
88
89 pctx.StaticVariable("arm64Cflags", strings.Join(arm64Cflags, " "))
90 pctx.StaticVariable("arm64Ldflags", strings.Join(arm64Ldflags, " "))
91 pctx.StaticVariable("arm64Cppflags", strings.Join(arm64Cppflags, " "))
92 pctx.StaticVariable("arm64IncludeFlags", strings.Join([]string{
93 "-isystem ${LibcRoot}/arch-arm64/include",
94 "-isystem ${LibcRoot}/include",
95 "-isystem ${LibcRoot}/kernel/uapi",
96 "-isystem ${LibcRoot}/kernel/uapi/asm-arm64",
97 "-isystem ${LibmRoot}/include",
98 "-isystem ${LibmRoot}/include/arm64",
99 }, " "))
100
101 pctx.StaticVariable("arm64ClangCflags", strings.Join(clangFilterUnknownCflags(arm64Cflags), " "))
102 pctx.StaticVariable("arm64ClangLdflags", strings.Join(clangFilterUnknownCflags(arm64Ldflags), " "))
103 pctx.StaticVariable("arm64ClangCppflags", strings.Join(clangFilterUnknownCflags(arm64Cppflags), " "))
104}
105
106type toolchainArm64 struct {
107 toolchain64Bit
108}
109
110var toolchainArm64Singleton = &toolchainArm64{}
111
Dan Albertbe961682015-03-18 23:38:50 -0700112func (t *toolchainArm64) Name() string {
113 return "arm64"
114}
115
Colin Cross3f40fa42015-01-30 17:27:36 -0800116func (t *toolchainArm64) GccRoot() string {
117 return "${arm64GccRoot}"
118}
119
120func (t *toolchainArm64) GccTriple() string {
121 return "${arm64GccTriple}"
122}
123
Dan Albertbe961682015-03-18 23:38:50 -0700124func (t *toolchainArm64) GccVersion() string {
Dan Willemsen34fc3b12015-12-07 12:30:44 -0800125 return arm64GccVersion
Dan Albertbe961682015-03-18 23:38:50 -0700126}
127
Colin Cross3f40fa42015-01-30 17:27:36 -0800128func (t *toolchainArm64) Cflags() string {
Colin Cross28344522015-04-22 13:07:53 -0700129 return "${arm64Cflags}"
Colin Cross3f40fa42015-01-30 17:27:36 -0800130}
131
132func (t *toolchainArm64) Cppflags() string {
133 return "${arm64Cppflags}"
134}
135
136func (t *toolchainArm64) Ldflags() string {
137 return "${arm64Ldflags}"
138}
139
140func (t *toolchainArm64) IncludeFlags() string {
141 return "${arm64IncludeFlags}"
142}
143
144func (t *toolchainArm64) ClangTriple() string {
145 return "${arm64GccTriple}"
146}
147
148func (t *toolchainArm64) ClangCflags() string {
149 return "${arm64ClangCflags}"
150}
151
152func (t *toolchainArm64) ClangCppflags() string {
153 return "${arm64ClangCppflags}"
154}
155
156func (t *toolchainArm64) ClangLdflags() string {
157 return "${arm64Ldflags}"
158}
159
Colin Crossc5c24ad2015-11-20 15:35:00 -0800160func arm64ToolchainFactory(arch common.Arch) Toolchain {
Colin Cross3f40fa42015-01-30 17:27:36 -0800161 return toolchainArm64Singleton
162}
163
164func init() {
Dan Willemsen490fd492015-11-24 17:53:15 -0800165 registerDeviceToolchainFactory(common.Arm64, arm64ToolchainFactory)
Colin Cross3f40fa42015-01-30 17:27:36 -0800166}