diff --git a/rust/config/Android.bp b/rust/config/Android.bp index e0cc4ce07..1f0109f0d 100644 --- a/rust/config/Android.bp +++ b/rust/config/Android.bp @@ -13,6 +13,7 @@ bootstrap_go_package { "toolchain.go", "allowed_list.go", "x86_darwin_host.go", + "x86_linux_bionic_host.go", "x86_linux_host.go", "x86_device.go", "x86_64_device.go", diff --git a/rust/config/x86_linux_bionic_host.go b/rust/config/x86_linux_bionic_host.go new file mode 100644 index 000000000..b1a2c178e --- /dev/null +++ b/rust/config/x86_linux_bionic_host.go @@ -0,0 +1,73 @@ +// Copyright 2020 The Android Open Source Project +// +// 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 ( + "strings" + + "android/soong/android" +) + +var ( + LinuxBionicRustFlags = []string{} + LinuxBionicRustLinkFlags = []string{ + "-B${cc_config.ClangBin}", + "-fuse-ld=lld", + "-Wl,--undefined-version", + "-nostdlib", + } +) + +func init() { + registerToolchainFactory(android.LinuxBionic, android.X86_64, linuxBionicX8664ToolchainFactory) + + pctx.StaticVariable("LinuxBionicToolchainRustFlags", strings.Join(LinuxBionicRustFlags, " ")) + pctx.StaticVariable("LinuxBionicToolchainLinkFlags", strings.Join(LinuxBionicRustLinkFlags, " ")) +} + +type toolchainLinuxBionicX8664 struct { + toolchain64Bit +} + +func (toolchainLinuxBionicX8664) Supported() bool { + return true +} + +func (toolchainLinuxBionicX8664) Bionic() bool { + return true +} + +func (t *toolchainLinuxBionicX8664) Name() string { + return "x86_64" +} + +func (t *toolchainLinuxBionicX8664) RustTriple() string { + return "x86_64-linux-android" +} + +func (t *toolchainLinuxBionicX8664) ToolchainLinkFlags() string { + // Prepend the lld flags from cc_config so we stay in sync with cc + return "${cc_config.LinuxBionicLldflags} ${config.LinuxBionicToolchainLinkFlags}" +} + +func (t *toolchainLinuxBionicX8664) ToolchainRustFlags() string { + return "${config.LinuxBionicToolchainRustFlags}" +} + +func linuxBionicX8664ToolchainFactory(arch android.Arch) Toolchain { + return toolchainLinuxBionicX8664Singleton +} + +var toolchainLinuxBionicX8664Singleton Toolchain = &toolchainLinuxBionicX8664{}