1b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// Copyright 2015 Google Inc. All rights reserved. 2b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// 3b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// Licensed under the Apache License, Version 2.0 (the "License"); 4b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// you may not use this file except in compliance with the License. 5b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// You may obtain a copy of the License at 6b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// 7b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// http://www.apache.org/licenses/LICENSE-2.0 8b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// 9b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// Unless required by applicable law or agreed to in writing, software 10b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// distributed under the License is distributed on an "AS IS" BASIS, 11b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// See the License for the specific language governing permissions and 13b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross// limitations under the License. 14b0cba6a00fb333fd1bfc01a82cebf35f2d8bf162Colin Cross 153f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crosspackage cc 163f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 173f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossimport ( 183f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "strings" 193f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 203f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "android/soong/common" 213f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross) 223f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 233f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossvar ( 243f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross arm64Cflags = []string{ 253f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fno-exceptions", // from build/core/combo/select.mk 263f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wno-multichar", // from build/core/combo/select.mk 273f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fno-strict-aliasing", 287a0f848998067a61531b01699fa5d436670c0e36Dan Willemsen "-fstack-protector-strong", 293f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-ffunction-sections", 303f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fdata-sections", 313f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-funwind-tables", 323f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wa,--noexecstack", 333f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Werror=format-security", 343f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-D_FORTIFY_SOURCE=2", 353f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fno-short-enums", 363f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-no-canonical-prefixes", 373f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fno-canonical-system-headers", 383f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 393f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross // Help catch common 32/64-bit errors. 403f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Werror=pointer-to-int-cast", 413f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Werror=int-to-pointer-cast", 423f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 433f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fno-strict-volatile-bitfields", 443f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 453f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross // TARGET_RELEASE_CFLAGS 463f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-DNDEBUG", 473f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-O2 -g", 483f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wstrict-aliasing=2", 493f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fgcse-after-reload", 503f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-frerun-cse-after-loop", 513f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-frename-registers", 523f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross } 533f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 543f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross arm64Ldflags = []string{ 553f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,-z,noexecstack", 563f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,-z,relro", 573f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,-z,now", 583f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,--build-id=md5", 593f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,--warn-shared-textrel", 603f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,--fatal-warnings", 613f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,-maarch64linux", 623f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,--hash-style=gnu", 633bf6b472299efa1a0e666010d68351bae949f826Dan Willemsen "-Wl,--fix-cortex-a53-843419", 647a0f848998067a61531b01699fa5d436670c0e36Dan Willemsen "-fuse-ld=gold", 657a0f848998067a61531b01699fa5d436670c0e36Dan Willemsen "-Wl,--icf=safe", 66c7e45974615735f2337ddfcd1f756062443d254dDan Willemsen "-Wl,--no-undefined-version", 673f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 683f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross // Disable transitive dependency library symbol resolving. 693f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-Wl,--allow-shlib-undefined", 703f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross } 713f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 723f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross arm64Cppflags = []string{ 733f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-fvisibility-inlines-hidden", 743f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross } 753f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross) 763f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 7734fc3b1e84f645009e3cb21be0161eaa53d6d0f4Dan Willemsenconst ( 7834fc3b1e84f645009e3cb21be0161eaa53d6d0f4Dan Willemsen arm64GccVersion = "4.9" 7934fc3b1e84f645009e3cb21be0161eaa53d6d0f4Dan Willemsen) 8034fc3b1e84f645009e3cb21be0161eaa53d6d0f4Dan Willemsen 813f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc init() { 8234fc3b1e84f645009e3cb21be0161eaa53d6d0f4Dan Willemsen pctx.StaticVariable("arm64GccVersion", arm64GccVersion) 833f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 8434cc69e4bf36cb65bb181b42ccb0f8c792a32cfbDan Willemsen pctx.SourcePathVariable("arm64GccRoot", 8587b17d1ff46ab86ab897c50435c423f28be4895fDan Willemsen "prebuilts/gcc/${HostPrebuiltTag}/aarch64/aarch64-linux-android-${arm64GccVersion}") 863f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 873f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64GccTriple", "aarch64-linux-android") 883f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 893f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64Cflags", strings.Join(arm64Cflags, " ")) 903f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64Ldflags", strings.Join(arm64Ldflags, " ")) 913f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64Cppflags", strings.Join(arm64Cppflags, " ")) 923f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64IncludeFlags", strings.Join([]string{ 933f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-isystem ${LibcRoot}/arch-arm64/include", 943f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-isystem ${LibcRoot}/include", 953f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-isystem ${LibcRoot}/kernel/uapi", 963f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-isystem ${LibcRoot}/kernel/uapi/asm-arm64", 973f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-isystem ${LibmRoot}/include", 983f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross "-isystem ${LibmRoot}/include/arm64", 993f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross }, " ")) 1003f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1013f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64ClangCflags", strings.Join(clangFilterUnknownCflags(arm64Cflags), " ")) 1023f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64ClangLdflags", strings.Join(clangFilterUnknownCflags(arm64Ldflags), " ")) 1033f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross pctx.StaticVariable("arm64ClangCppflags", strings.Join(clangFilterUnknownCflags(arm64Cppflags), " ")) 1043f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1053f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1063f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crosstype toolchainArm64 struct { 1073f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross toolchain64Bit 1083f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1093f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1103f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossvar toolchainArm64Singleton = &toolchainArm64{} 1113f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 112be96168ee3f9d45805758354563981a892253d1cDan Albertfunc (t *toolchainArm64) Name() string { 113be96168ee3f9d45805758354563981a892253d1cDan Albert return "arm64" 114be96168ee3f9d45805758354563981a892253d1cDan Albert} 115be96168ee3f9d45805758354563981a892253d1cDan Albert 1163f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) GccRoot() string { 1173f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64GccRoot}" 1183f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1193f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1203f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) GccTriple() string { 1213f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64GccTriple}" 1223f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1233f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 124be96168ee3f9d45805758354563981a892253d1cDan Albertfunc (t *toolchainArm64) GccVersion() string { 12534fc3b1e84f645009e3cb21be0161eaa53d6d0f4Dan Willemsen return arm64GccVersion 126be96168ee3f9d45805758354563981a892253d1cDan Albert} 127be96168ee3f9d45805758354563981a892253d1cDan Albert 1283f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) Cflags() string { 12928344528cf440442acd79894b7f4cfabb7a7bb46Colin Cross return "${arm64Cflags}" 1303f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1313f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1323f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) Cppflags() string { 1333f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64Cppflags}" 1343f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1353f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1363f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) Ldflags() string { 1373f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64Ldflags}" 1383f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1393f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1403f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) IncludeFlags() string { 1413f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64IncludeFlags}" 1423f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1433f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1443f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) ClangTriple() string { 1453f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64GccTriple}" 1463f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1473f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1483f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) ClangCflags() string { 1493f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64ClangCflags}" 1503f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1513f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1523f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) ClangCppflags() string { 1533f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64ClangCppflags}" 1543f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1553f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1563f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc (t *toolchainArm64) ClangLdflags() string { 1573f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return "${arm64Ldflags}" 1583f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1593f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 160c5c24ade6335455ea006499ee7ae449d89e56514Colin Crossfunc arm64ToolchainFactory(arch common.Arch) Toolchain { 1613f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross return toolchainArm64Singleton 1623f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 1633f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross 1643f40fa460d85b10646d383a3b6b01ea6d569b01bColin Crossfunc init() { 165490fd4955747c9d3715954359d72937960f02a22Dan Willemsen registerDeviceToolchainFactory(common.Arm64, arm64ToolchainFactory) 1663f40fa460d85b10646d383a3b6b01ea6d569b01bColin Cross} 167