Loading android/arch.go +1 −1 Original line number Diff line number Diff line Loading @@ -579,7 +579,7 @@ var ( osArchTypeMap = map[OsType][]ArchType{ Linux: []ArchType{X86, X86_64}, LinuxBionic: []ArchType{X86_64}, LinuxBionic: []ArchType{Arm64, X86_64}, Darwin: []ArchType{X86_64}, Windows: []ArchType{X86, X86_64}, Android: []ArchType{Arm, Arm64, X86, X86_64}, Loading cc/config/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ bootstrap_go_package { "x86_linux_host.go", "x86_linux_bionic_host.go", "x86_windows_host.go", "arm64_linux_host.go", ], testSrcs: [ "tidy_test.go", Loading cc/config/arm64_linux_host.go 0 → 100644 +94 −0 Original line number Diff line number Diff line // Copyright 2020 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "android/soong/android" "strings" ) var ( // This is a host toolchain but flags for device toolchain are required // as the flags are actually for Bionic-based builds. linuxCrossCflags = ClangFilterUnknownCflags(append(deviceGlobalCflags, // clang by default enables PIC when the clang triple is set to *-android. // See toolchain/llvm-project/clang/lib/Driver/ToolChains/CommonArgs.cpp#920. // However, for this host target, we don't set "-android" to avoid __ANDROID__ macro // which stands for "Android device target". Keeping PIC on is required because // many modules we have (e.g. Bionic) assume PIC. "-fpic", )) linuxCrossLdflags = ClangFilterUnknownCflags([]string{ "-Wl,-z,noexecstack", "-Wl,-z,relro", "-Wl,-z,now", "-Wl,--build-id=md5", "-Wl,--warn-shared-textrel", "-Wl,--fatal-warnings", "-Wl,--hash-style=gnu", "-Wl,--no-undefined-version", }) ) func init() { pctx.StaticVariable("LinuxBionicArm64Cflags", strings.Join(linuxCrossCflags, " ")) pctx.StaticVariable("LinuxBionicArm64Ldflags", strings.Join(linuxCrossLdflags, " ")) } // toolchain config for ARM64 Linux CrossHost. Almost everything is the same as the ARM64 Android // target. The overridden methods below show the differences. type toolchainLinuxArm64 struct { toolchainArm64 } func (toolchainLinuxArm64) ClangTriple() string { // Note the absence of "-android" suffix. The compiler won't define __ANDROID__ return "aarch64-linux" } func (toolchainLinuxArm64) ClangCflags() string { // The inherited flags + extra flags return "${config.Arm64ClangCflags} ${config.LinuxBionicArm64Cflags}" } func linuxArm64ToolchainFactory(arch android.Arch) Toolchain { archVariant := "armv8-a" // for host, default to armv8-a toolchainClangCflags := []string{arm64ClangArchVariantCflagsVar[archVariant]} // We don't specify CPU architecture for host. Conservatively assume // the host CPU needs the fix extraLdflags := "-Wl,--fix-cortex-a53-843419" ret := toolchainLinuxArm64{} // add the extra ld and lld flags ret.toolchainArm64.ldflags = strings.Join([]string{ "${config.Arm64Ldflags}", "${config.LinuxBionicArm64Ldflags}", extraLdflags, }, " ") ret.toolchainArm64.lldflags = strings.Join([]string{ "${config.Arm64Lldflags}", "${config.LinuxBionicArm64Ldflags}", extraLdflags, }, " ") ret.toolchainArm64.toolchainClangCflags = strings.Join(toolchainClangCflags, " ") return &ret } func init() { registerToolchainFactory(android.LinuxBionic, android.Arm64, linuxArm64ToolchainFactory) } rust/config/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -16,5 +16,6 @@ bootstrap_go_package { "x86_linux_host.go", "x86_device.go", "x86_64_device.go", "arm64_linux_host.go", ], } rust/config/arm64_device.go +8 −1 Original line number Diff line number Diff line Loading @@ -71,9 +71,16 @@ func (t *toolchainArm64) Supported() bool { } func Arm64ToolchainFactory(arch android.Arch) Toolchain { archVariant := arch.ArchVariant if archVariant == "" { // arch variants defaults to armv8-a. This is mostly for // the host target which borrows toolchain configs from here. archVariant = "armv8-a" } toolchainRustFlags := []string{ "${config.Arm64ToolchainRustFlags}", "${config.Arm64" + arch.ArchVariant + "VariantRustFlags}", "${config.Arm64" + archVariant + "VariantRustFlags}", } toolchainRustFlags = append(toolchainRustFlags, deviceGlobalRustFlags...) Loading Loading
android/arch.go +1 −1 Original line number Diff line number Diff line Loading @@ -579,7 +579,7 @@ var ( osArchTypeMap = map[OsType][]ArchType{ Linux: []ArchType{X86, X86_64}, LinuxBionic: []ArchType{X86_64}, LinuxBionic: []ArchType{Arm64, X86_64}, Darwin: []ArchType{X86_64}, Windows: []ArchType{X86, X86_64}, Android: []ArchType{Arm, Arm64, X86, X86_64}, Loading
cc/config/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ bootstrap_go_package { "x86_linux_host.go", "x86_linux_bionic_host.go", "x86_windows_host.go", "arm64_linux_host.go", ], testSrcs: [ "tidy_test.go", Loading
cc/config/arm64_linux_host.go 0 → 100644 +94 −0 Original line number Diff line number Diff line // Copyright 2020 Google Inc. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "android/soong/android" "strings" ) var ( // This is a host toolchain but flags for device toolchain are required // as the flags are actually for Bionic-based builds. linuxCrossCflags = ClangFilterUnknownCflags(append(deviceGlobalCflags, // clang by default enables PIC when the clang triple is set to *-android. // See toolchain/llvm-project/clang/lib/Driver/ToolChains/CommonArgs.cpp#920. // However, for this host target, we don't set "-android" to avoid __ANDROID__ macro // which stands for "Android device target". Keeping PIC on is required because // many modules we have (e.g. Bionic) assume PIC. "-fpic", )) linuxCrossLdflags = ClangFilterUnknownCflags([]string{ "-Wl,-z,noexecstack", "-Wl,-z,relro", "-Wl,-z,now", "-Wl,--build-id=md5", "-Wl,--warn-shared-textrel", "-Wl,--fatal-warnings", "-Wl,--hash-style=gnu", "-Wl,--no-undefined-version", }) ) func init() { pctx.StaticVariable("LinuxBionicArm64Cflags", strings.Join(linuxCrossCflags, " ")) pctx.StaticVariable("LinuxBionicArm64Ldflags", strings.Join(linuxCrossLdflags, " ")) } // toolchain config for ARM64 Linux CrossHost. Almost everything is the same as the ARM64 Android // target. The overridden methods below show the differences. type toolchainLinuxArm64 struct { toolchainArm64 } func (toolchainLinuxArm64) ClangTriple() string { // Note the absence of "-android" suffix. The compiler won't define __ANDROID__ return "aarch64-linux" } func (toolchainLinuxArm64) ClangCflags() string { // The inherited flags + extra flags return "${config.Arm64ClangCflags} ${config.LinuxBionicArm64Cflags}" } func linuxArm64ToolchainFactory(arch android.Arch) Toolchain { archVariant := "armv8-a" // for host, default to armv8-a toolchainClangCflags := []string{arm64ClangArchVariantCflagsVar[archVariant]} // We don't specify CPU architecture for host. Conservatively assume // the host CPU needs the fix extraLdflags := "-Wl,--fix-cortex-a53-843419" ret := toolchainLinuxArm64{} // add the extra ld and lld flags ret.toolchainArm64.ldflags = strings.Join([]string{ "${config.Arm64Ldflags}", "${config.LinuxBionicArm64Ldflags}", extraLdflags, }, " ") ret.toolchainArm64.lldflags = strings.Join([]string{ "${config.Arm64Lldflags}", "${config.LinuxBionicArm64Ldflags}", extraLdflags, }, " ") ret.toolchainArm64.toolchainClangCflags = strings.Join(toolchainClangCflags, " ") return &ret } func init() { registerToolchainFactory(android.LinuxBionic, android.Arm64, linuxArm64ToolchainFactory) }
rust/config/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -16,5 +16,6 @@ bootstrap_go_package { "x86_linux_host.go", "x86_device.go", "x86_64_device.go", "arm64_linux_host.go", ], }
rust/config/arm64_device.go +8 −1 Original line number Diff line number Diff line Loading @@ -71,9 +71,16 @@ func (t *toolchainArm64) Supported() bool { } func Arm64ToolchainFactory(arch android.Arch) Toolchain { archVariant := arch.ArchVariant if archVariant == "" { // arch variants defaults to armv8-a. This is mostly for // the host target which borrows toolchain configs from here. archVariant = "armv8-a" } toolchainRustFlags := []string{ "${config.Arm64ToolchainRustFlags}", "${config.Arm64" + arch.ArchVariant + "VariantRustFlags}", "${config.Arm64" + archVariant + "VariantRustFlags}", } toolchainRustFlags = append(toolchainRustFlags, deviceGlobalRustFlags...) Loading